Я хочу упаковать GDAL и его привязку JAVA в плагин SWT. (P.S.GDAL использует swig для генерации привязки Java)package GDAL JAVA Связывание и родная библиотека в плагине SWT
У меня есть все необходимые родные библиотеки и вы хотите упаковать их в свой плагин Eclipse, чтобы позволить другим людям использовать его без установки GDAL на свой компьютер.
Проблема заключается в том, что JAVA Binding (или родной Lib себя) будет искать необходимые собственные библиотеки из PATH (Window) или LD_LIBRARY_PATH (Linux), а не глядя в эти LIBS относительного расположения. Кроме того, GDAL будет искать некоторые необходимые данные геоинформации из переменной окружения GDAL_DATA.
Как я могу решить эти две проблемы, чтобы сделать портативный SWT-модуль? 1) специфические для конкретной платформы платформы 2) некоторый вид переменных среды
Похоже, что затмение не может разрешить зависимые библиотеки без установки PATH. Bundle-NativeCode (см. Ниже) не работает.
Если я пытаюсь напрямую вызвать 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/
Манифест для этого подключаемого модуля
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
Что именно проблема (какие ошибки сообщают, кто)? OSGi загрузит ваши DLL из вашего плагина в соответствии с разделом 'Bundle-NativeCode', поэтому * JAVA Binding (или собственный собственный lib) будет искать необходимые библиотеки из PATH *, это не так. –
@Martti: действительно? Я думаю, что собственный код пытается загрузить соответствующие библиотеки из PATH и ищет некоторые данные конфигурации из другого определенного пути переменной среды. Сообщение об ошибке: [[Ошибка загрузки исходной библиотеки. java.lang.UnsatisfiedLinkError: ogrjni.dll: Не могу найти зависимые библиотеки]] – elgcom
Да, ** родные библиотеки ** загружаются из PATH.То, что я пытался сделать, это то, что это не имеет ничего общего с Eclipse и Java, но нормальное решение lib для любой программы. –