2017-05-09 104 views
0

我想爲C++庫在linux上爲JNA指定庫加載路徑。 從java文檔我調用我的程序時使用-Djna.library.path但JNA無法加載庫。JNA庫路徑似乎被忽略

這是我如何調用該程序:

java -jar -Djna.library.path=/home/lib program.jar 

當我使用-Djna.debug_load=true我可以看到庫路徑和JNA試圖找到庫,路徑是正確的,該庫的名稱也是正確的,但它不加載。 JNA將繼續搜索庫的資源路徑,然後無法找到它。

當我把庫放在當前目錄(與program.jar相同的級別)時,JNA很高興,並且庫加載沒有問題。

當我使用:

java -cp program.jar:/home/lib package.program 

JNA還加載正確的庫。

有沒有人知道爲什麼-Djna.library.path不起作用?是否因爲我正在使用帶有清單的jar應用程序文件?

任何有類似問題的人?

+1

您可以加入用於加載庫的代碼? –

+0

可能與此相同? http://stackoverflow.com/questions/27829764/jna-native-library-dependencies-and-jar-extraction –

+0

其他地方的答案:DLL加載是由操作系統完成的,如果DLL存儲在jar中,那麼他們必須在可以加載之前將其提取到(Windows)文件系統的某處。 –

回答

0

請注意,一旦您離開JVM,jna.library.path或java.library.path不再被考慮在內。

確保將LD_LIBRARY_PATH設置爲指向libshared.so所在的位置。

更新:

看看此處查看如何使用代碼共享庫的作品:

https://github.com/mkowsiak/jnicookbook/blob/master/recipeNo023

+0

我不明白你的評論。你是說如果我像這樣運行它 - > java -jar -Djna.library.path =/home/lib program.jar那麼它不起作用,我必須使用LD_LIBRARY_PATH? – onLs

+0

是的,嘗試一下。首先將LD_LIBRARY_PATH設置爲您的文件所在的位置。此外,請仔細檢查您的C++代碼所依賴的所有庫是否也可用於JVM。 – mko