मैं GDAL और उसके जावा को एक एसडब्ल्यूटी प्लग-इन में बाध्य करना चाहता हूं। (पीएस जीडीएएल जावा बाध्यकारी उत्पन्न करने के लिए स्विग का उपयोग करें)पैकेज जीडीएएल जावा बाध्यकारी और देशी पुस्तकालय एक एसडब्ल्यूटी प्लगइन
मेरे पास सभी आवश्यक मूल पुस्तकालय हैं और उन्हें अपने ग्रहण प्लग-इन में पैक करना चाहते हैं ताकि अन्य लोग अपने कंप्यूटर पर जीडीएएल इंस्टॉल किए बिना इसका इस्तेमाल कर सकें।
समस्या यह है कि जावा बाइंडिंग (या खुद lib देशी) पथ (विंडो) या LD_LIBRARY_PATH (लिनक्स) से आवश्यक देशी पुस्तकालयों देखने के बजाय एक रिश्तेदार स्थान में उन लोगों के libs को देख रहा है। इसके अलावा, जीडीएएल पर्यावरण परिवर्तनीय GDAL_DATA से कुछ आवश्यक भौगोलिक परिभाषा डेटा भी देखेंगे।
पोर्टेबल एसडब्ल्यूटी प्लग-इन बनाने के लिए मैं उन दो समस्याओं को कैसे हल कर सकता हूं? 1) पैकेज मंच विशिष्ट देशी libs 2) कुछ वातावरण चर लुक-अप
ऐसा नहीं है कि ग्रहण पथ सेट बिना निर्भर libs का समाधान नहीं कर रहा है। बंडल-नेटिवोड (नीचे देखें) काम नहीं किया।
यदि मैं सीधे अपने सिस्टम में System.Library ("SomethingNotExist") को कॉल करने का प्रयास करता हूं; तो मैं
java.lang.UnsatisfiedLinkError: no SomethingNotExist in java.library.path
मिलता है मैं System.Library मेरी प्लगइन में ("SomethingDoesExist") कहते हैं, तो मैं अपने प्लगइन में
java.lang.UnsatisfiedLinkError: SomethingDoesExist.dll: Can't find dependent libraries
फ़ाइल संरचना मिल
org.gdal/
+ src/
+ nativelib/
+ linux32/
+ ...
+ linux32/
+ ...
+ win32/
+ ...
+ win64/
+ ...
+ META-INF
+ MANIFEST.MF
+ gdal-data/
+ gdal.jar
+ build.properties
इस प्लग-इन
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
gdal.jar,\
gdal-data/,\
nativelib/
के लिए build.properties
मैनिफ़ेस्ट इस प्लग-इन
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: GDAL
Bundle-SymbolicName: org.gdal
Bundle-Version: 1.8.1
Bundle-NativeCode:
nativelib/linux32/libgdal.so;
nativelib/linux32/libgdalconstjni.so;
nativelib/linux32/libgdaljni.so;
nativelib/linux32/libogrjni.so;
nativelib/linux32/libosrjni.so;
osname=Linux; processor=x86,
nativelib/linux64/libgdal.so;
nativelib/linux64/libgdalconstjni.so;
nativelib/linux64/libgdaljni.so;
nativelib/linux64/libogrjni.so;
nativelib/linux64/libosrjni.so;
osname=Linux; processor=x86_64,
nativelib/win32/gdal18.dll;
nativelib/win32/gdalconstjni.dll;
nativelib/win32/gdaljni.dll;
nativelib/win32/geos_c.dll;
nativelib/win32/iconv.dll;
nativelib/win32/libcurl.dll;
nativelib/win32/libeay32.dll;
nativelib/win32/libexpat.dll;
nativelib/win32/libmysql.dll;
nativelib/win32/libpq.dll;
nativelib/win32/libxml2.dll;
nativelib/win32/ogrjni.dll;
nativelib/win32/openjpeg.dll;
nativelib/win32/osrjni.dll;
nativelib/win32/pdflib.dll;
nativelib/win32/proj.dll;
nativelib/win32/spatialite.dll;
nativelib/win32/sqlite3.dll;
nativelib/win32/ssleay32.dll;
nativelib/win32/xerces-c_2_8.dll;
nativelib/win32/zlib1.dll;
osname=win32; processor=x86,
nativelib/win64/ogrjni.dll;
nativelib/win64/gdal18.dll;
nativelib/win64/xerces-c_2_8.dll;
nativelib/win64/libexpat.dll;
nativelib/win64/libpq.dll;
nativelib/win64/spatialite.dll;
nativelib/win64/libmysql.dll;
nativelib/win64/geos_c.dll;
nativelib/win64/libcurl.dll;
nativelib/win64/openjpeg.dll;
nativelib/win64/iconv.dll;
nativelib/win64/libeay32.dll;
nativelib/win64/gdaljni.dll;
nativelib/win64/osrjni.dll;
nativelib/win64/gdalconstjni.dll;
nativelib/win64/libxml2.dll;
nativelib/win64/pdflib.dll;
nativelib/win64/proj.dll;
nativelib/win64/sqlite3.dll;
nativelib/win64/ssleay32.dll;
nativelib/win64/zlib1.dll;
osname=win32; processor=x86_64
Bundle-ClassPath: gdal.jar,
.,
gdal-data/
Export-Package: org.gdal,
org.gdal.gdal,
org.gdal.gdalconst,
org.gdal.ogr,
org.gdal.osr
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
वास्तव में क्या समस्या (किस प्रकार की त्रुटियां जो द्वारा रिपोर्ट कर रहे हैं) क्या है? ओएसजीआई आपके डीएलएल को आपकी बंडल से 'बंडल-नेटिवोड' अनुभाग के अनुसार लोड करेगा, इसलिए * जावा बाध्यकारी (या देशी lib lib) पाथ से आवश्यक मूल पुस्तकालयों को देखेगा * मामला नहीं है। –
@ मार्टी: वास्तव में? मुझे लगता है कि देशी कोड PATH से प्रासंगिक libs लोड करने का प्रयास करता है और अन्य परिभाषित पर्यावरण चर पथ से कुछ कॉन्फ़िगरेशन डेटा देखता है। त्रुटि संदेश: [[मूल पुस्तकालय लोड विफल। java.lang.UnsatisfiedLinkError: ogrjni.dll: आश्रित पुस्तकालय नहीं ढूंढ सकते]] – elgcom
हां, ** देशी libs ** पथ से लोड हो रहे हैं।जिस बिंदु को मैं बनाने की कोशिश कर रहा था वह यह है कि ग्रहण और न ही जावा के साथ इसका कोई लेना-देना नहीं है, लेकिन किसी भी कार्यक्रम के सामान्य lib हल हो रहा है। –