2011-12-27 2 views
6

Я хочу упаковать 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 

+0

Что именно проблема (какие ошибки сообщают, кто)? OSGi загрузит ваши DLL из вашего плагина в соответствии с разделом 'Bundle-NativeCode', поэтому * JAVA Binding (или собственный собственный lib) будет искать необходимые библиотеки из PATH *, это не так. –

+0

@Martti: действительно? Я думаю, что собственный код пытается загрузить соответствующие библиотеки из PATH и ищет некоторые данные конфигурации из другого определенного пути переменной среды. Сообщение об ошибке: [[Ошибка загрузки исходной библиотеки. java.lang.UnsatisfiedLinkError: ogrjni.dll: Не могу найти зависимые библиотеки]] – elgcom

+0

Да, ** родные библиотеки ** загружаются из PATH.То, что я пытался сделать, это то, что это не имеет ничего общего с Eclipse и Java, но нормальное решение lib для любой программы. –

ответ

0

для выпуска среды из GDAL в Java

использование gdal.SetConfigOption

http://osgeo-org.1560.n6.nabble.com/gdal-dev-GDAL-DATA-td3744017.html

установить GDAL_DATA с папкой который можно прочитать из пакета плагинов.

http://www.vogella.de/blog/2010/07/06/reading-resources-from-plugin/

+0

Ваша первая ссылка указывает на общий форум atm. – Chau

+0

исправлено: ,,,,,,,,,,,,,, – elgcom

Смежные вопросы