2011-05-26 67 views
4

我有一個Java程序對本地庫(「mylib.so」)進行一些JNI調用。每當我要運行這個程序,在命令行中,我必須設置的java.library.path我的庫的位置這樣:替代設置java.library.path?

java -Djava.library.path=/var/natives/ -classpath MyPackage.jar MyPackage.MyClass arg1 arg2 

我想知道是否有任何的替代品,所以我不每次運行程序時都必須使用-D選項進行設置。

我已經嘗試將/var/natives/添加到我的$ PATH變量中,但它仍然抱怨說,如果我沒有明確將它設置爲-D,它將無法找到該庫。

我還有其他的選擇嗎?

+1

只要把整個命令在'.sh'文件。 – BalusC 2011-05-26 20:39:55

+0

@BalusC,如果你想發佈作爲答案我會接受它。 – 2011-05-27 15:01:55

回答

2

只需將整個命令放在.sh文件中即可避免您每次都重複此操作。

0

您可以放在一個地方(這可能是次優的)位於[JRE]/lib/i386目錄(或[JRE]/lib/x64或任何在64位Java安裝中調用的任何地方)。

另外,你有沒有試過/var/nativesLD_LIBRARY_PATH

+0

是的,我已經嘗試將它添加到LD_LIBRARY_PATH,沒有骰子。 – 2011-05-27 15:02:29

1

而不是使用System.loadLibrary("mylib"),請使用System.load("/var/natives/mylib.so")

或者,您可以爲該類定義自定義類加載器並覆蓋ClassLoader.findLibrary(String)方法。

0

另一種可能性是創建自己的變量,其中的開關。例如:

COMPILE="-Djava.library.path=/var/natives/ -classpath /var/packages/MyPackage.jar" 

然後運行類似命令:

java $COMPILE MyPackage.MyClass arg1 arg2 arg3