2011-12-27 22 views
6

Tôi muốn đóng gói GDAL và JAVA của nó ràng buộc vào một trình cắm thêm SWT. (P.S. GDAL sử dụng lệnh swig để tạo liên kết Java)gói GDAL JAVA Ràng buộc và thư viện gốc trong một plugin SWT

Tôi có tất cả thư viện gốc cần thiết và muốn đóng gói chúng vào trình cắm thêm Eclipse của tôi để cho người khác sử dụng nó mà không cần cài đặt GDAL trên máy tính của họ.

Vấn đề là các JAVA Ràng buộc (hoặc mẹ đẻ lib chính nó) sẽ tra cứu thư viện nguồn gốc cần thiết từ PATH (Window) hoặc LD_LIBRARY_PATH (Linux) thay vì nhìn lên những libs ở một vị trí tương đối. Hơn nữa, GDAL cũng sẽ tra cứu một số dữ liệu định nghĩa địa lý cần thiết từ biến môi trường GDAL_DATA.

Làm cách nào để tôi có thể giải quyết hai vấn đề đó để tạo trình cắm SWT di động? 1) nền tảng gói riêng biệt libs bản địa 2) một số biến môi trường look-up

Có vẻ như nhật thực không thể giải quyết lib phụ thuộc mà không cần đặt PATH. Bundle-NativeCode (xem bên dưới) không hoạt động.

Nếu tôi cố gọi trực tiếp System.Library ("SomethingNotExist") trong plugin của mình; sau đó tôi nhận được

java.lang.UnsatisfiedLinkError: no SomethingNotExist in java.library.path 

Nếu tôi gọi System.Library ("SomethingDoesExist") trong plugin của tôi, sau đó tôi nhận được

java.lang.UnsatisfiedLinkError: SomethingDoesExist.dll: Can't find dependent libraries 

Cấu trúc tập tin trong plugin của tôi

org.gdal/ 
    + src/ 
    + nativelib/ 
     + linux32/ 
     + ... 
     + linux32/ 
     + ... 
     + win32/ 
     + ... 
     + win64/ 
     + ... 
    + META-INF 
     + MANIFEST.MF 
    + gdal-data/ 
    + gdal.jar 
    + build.properties 

Build.properties cho Plugin này

source.. = src/ 
output.. = bin/ 
bin.includes = META-INF/,\ 
       .,\ 
       gdal.jar,\ 
       gdal-data/,\ 
       nativelib/ 

Các Manifest cho Plug-in này

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

Vấn đề chính xác (lỗi nào được báo cáo bởi ai)? OSGi sẽ tải các tệp DLL của bạn từ plugin của bạn theo phần 'Bundle-NativeCode', vì vậy * JAVA Binding (hoặc bản thân lib tự nhiên) sẽ tra cứu các thư viện gốc cần thiết từ PATH * không phải như vậy. –

+0

@Martti: thực sự? Tôi nghĩ rằng mã nguồn gốc cố gắng tải libs có liên quan từ PATH và tìm kiếm một số dữ liệu cấu hình từ đường dẫn biến môi trường được xác định khác. Thông báo lỗi: [[Tải thư viện gốc không thành công. java.lang.UnsatisfiedLinkError: ogrjni.dll: Không thể tìm thấy thư viện phụ thuộc]] – elgcom

+0

Có, ** lib tự nhiên ** đang tải từ PATH.Điểm mà tôi đã cố gắng thực hiện là điều này không liên quan gì đến Eclipse cũng như Java, nhưng việc phân giải lib bình thường của bất kỳ chương trình nào. –

Trả lời

Các vấn đề liên quan