设置 java.library.path 的替代方法?
我有一个 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 显式设置它,它无法找到该库。
我还有其他选择吗?
I have a Java program making some JNI calls to a native library ("mylib.so"). Whenever I want to run this program, from the command line, I must set java.library.path to the location of my library as such:
java -Djava.library.path=/var/natives/ -classpath MyPackage.jar MyPackage.MyClass arg1 arg2
I'm wondering if there are any alternatives so I do not have to set it with the -D option everytime I run my program.
I have tried adding /var/natives/
to my $PATH variable, but it still complains that it cannot find the library if I do not explicitly set it with -D.
Do I have any other options?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
只需将整个命令放入
.sh
文件中即可避免每次都重复执行。Just put the entire command in a
.sh
file to save yourself from repeating it everytime.不要使用 System.loadLibrary("mylib"),而是使用 System.load("/var/natives/mylib.so")。
或者,您可以为该类定义自定义类加载器并重写
ClassLoader.findLibrary(String)
方法。Instead of using
System.loadLibrary("mylib")
, useSystem.load("/var/natives/mylib.so")
.Or, you could define a custom class loader for the class and override the
ClassLoader.findLibrary(String)
method.您可以将其放置的一个位置(诚然可能不是最佳的)是在
[JRE]/lib/i386
目录(或[JRE]/lib/x64
或其他任何目录)在 64 位 Java 安装中调用)。另外,您是否尝试过将
/var/natives
放入LD_LIBRARY_PATH
中?One place you can put it (which admittedly may be suboptimal) is in the
[JRE]/lib/i386
directory (or[JRE]/lib/x64
or whatever it is called in a 64-bit Java installation).Also, have you tried putting
/var/natives
inLD_LIBRARY_PATH
?另一种可能性是使用其中的开关创建您自己的变量。例如:
然后运行如下命令:
Another possibility is creating your own variable with the switches in it. For example:
Then run the command like: