在尝试在运行时加载JNI库时,我在其中一台客户机器上遇到了一种奇怪的行为。
尝试使用
加载库时System.load("libtestlibrary.so")
我得到了
liblibtestlibrary.so.so: cannot open shared object file: No such file or directory
似乎给定的库名称(错误地)以" lib"为前缀。并加上" .so"因此无法找到我们的图书馆。
这只发生在一台机器上(AIX 6)。我无法使用完全相同的JRE在我们自己的AIX 6机箱上重现此行为,因此我猜测这是由客户机器上的某些操作系统设置引起的。
有人知道如何关闭它吗?
答案 0 :(得分:0)
您可以使用:
System.loadLibrary("libraryname");
它将正确扩展为系统特定的表示法。或者您可以使用:
System.load("you_can_have_anything_you_like_here")
在第二种情况下,您需要做的就是指向文件的正确位置。如果您正在寻找跨系统开发,您可能有兴趣在JAR中打包您的本机代码。看看这里的示例代码,其中库来自JAR文件
section 3.5.5 of Frank's Quick R Tutorial
另外,请确保LD_LIBRARY_PATH
中有其他库可用。请注意,java.library.path
仅对您的“第一个”本机库有效。如果您的代码使用其他一些共享库,则必须使用rpath编译或确保库在系统范围内可见。
另一种方法是通过存根:https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo031
在这种情况下,您可以随意加载库并随意执行(例如,动态更改本机代码)。