Chcę pakiet GDAL i jego powiązanie JAVA do wtyczki SWT. (P.S. GDAL użyj swig do wygenerowania powiązania Java)pakiet GDAL JAVA Biblioteka wiązania i natywna w wtyczce SWT
Mam wszystkie niezbędne biblioteki natywne i chcę je spakować do mojej wtyczki Eclipse, aby inne osoby mogły z niego korzystać bez instalowania GDAL na swoim komputerze.
Problemem jest to, że JAVA Binding (lub rodzimy lib siebie) będzie poszukiwał niezbędnych bibliotek natywnych z PATH (okna) lub LD_LIBRARY_PATH (Linux) zamiast patrząc na te bibliotekami we względnym położeniu. Co więcej, GDAL szuka również niektórych niezbędnych danych geo-definicji ze zmiennej środowiskowej.
Jak mogę rozwiązać te dwa problemy, aby utworzyć przenośną wtyczkę SWT? 1) platforma specyficzna dla rodzimych bibliotek 2) analiza niektórych zmiennych środowiskowych
Wygląda na to, że Eclipse nie może rozwiązać zależnych bibliotek bez ustawienia PATH. Pakiet-NativeCode (patrz poniżej) nie działa.
Jeśli spróbuję bezpośrednio wywołać System.Library ("SomethingNotExist") w mojej wtyczce; potem dostać
java.lang.UnsatisfiedLinkError: no SomethingNotExist in java.library.path
Jeśli zadzwonię System.Library ("SomethingDoesExist") w moim plugin, potem dostać
java.lang.UnsatisfiedLinkError: SomethingDoesExist.dll: Can't find dependent libraries
struktura plików w moim plugin
org.gdal/
+ src/
+ nativelib/
+ linux32/
+ ...
+ linux32/
+ ...
+ win32/
+ ...
+ win64/
+ ...
+ META-INF
+ MANIFEST.MF
+ gdal-data/
+ gdal.jar
+ build.properties
The build.properties dla tego dodatku
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
gdal.jar,\
gdal-data/,\
nativelib/
Manifest dla tej wtyczki
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
Czym dokładnie jest problem (jakie błędy zgłasza kto)? OSGi załaduje twoje biblioteki DLL z twojej wtyczki zgodnie z sekcją 'Bundle-NativeCode', więc * JAVA Binding (lub natywna sama biblioteka) będzie szukała potrzebnych bibliotek natywnych od PATH *, tak nie jest. –
@Martti: naprawdę? Myślę, że kod natywny próbuje załadować odpowiednie biblioteki z PATH i wyszukuje niektóre dane konfiguracyjne z innej zdefiniowanej ścieżki zmiennej środowiskowej. Komunikat o błędzie: [[Ładowanie biblioteki macierzystej nie powiodło się. java.lang.UnsatisfiedLinkError: ogrjni.dll: Nie można znaleźć bibliotek zależnych]] – elgcom
Tak, ** biblioteki rodzime ** ładują się z PATH.Chodzi mi o to, że nie ma to nic wspólnego z Eclipse ani Javą, ale z normalnym rozwiązywaniem lib dowolnego programu. –