2011-12-27 18 views
6

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 

+0

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. –

+0

@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

+0

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. –

Odpowiedz