5

我有一个 Java 程序对本地库(“mylib.so”)进行一些 JNI 调用。每当我想从命令行运行这个程序时,我必须将 java.library.path 设置为我的库的位置,如下所示:

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

我想知道是否有任何替代方案,因此我不必在每次运行程序时都使用 -D 选项进行设置。

我尝试添加/var/natives/到我的 $PATH 变量,但它仍然抱怨如果我没有使用 -D 显式设置它,它无法找到库。

我还有其他选择吗?

4

4 回答 4

2

只需将整个命令放在一个.sh文件中,以免每次都重复它。

于 2011-05-27T15:05:00.537 回答
1

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

或者,您可以为该类定义一个自定义类加载器并覆盖该ClassLoader.findLibrary(String)方法。

于 2011-05-26T20:38:06.827 回答
0

您可以将它放在[JRE]/lib/i386目录中(或[JRE]/lib/x64在 64 位 Java 安装中调用它的任何位置)(诚然,这可能不是最理想的)。

/var/natives另外,你试过装LD_LIBRARY_PATH吗?

于 2011-05-26T20:05:30.000 回答
0

另一种可能性是使用其中的开关创建您自己的变量。例如:

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

然后运行如下命令:

java $COMPILE MyPackage.MyClass arg1 arg2 arg3
于 2011-05-27T17:39:55.420 回答