问题
我一直在尝试在我自己的 Mac 上运行单元测试。该测试在 Linux 服务器上运行良好,但在本地失败并显示以下跟踪:
java.lang.UnsatisfiedLinkError: no fedel_client in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
....
我尝试过的
从服务器复制.so
文件
我已将 fedel_client.so
从服务器复制到本地计算机上的 /workspace/dapper/java/lib/native/macosx
,并将其添加到java.library.path
:
-Djava.library.path=/workspace/dapper/java/lib/native/macosx:...
创建符号链接(symbolic link)
我创建了一个从 fedel_clinet
到 fedel_clinet.so
的符号链接(symbolic link),以防 Java 正在寻找前者(没有 .so
> 扩展名)。
将.so
目录添加到.bashrc
我尝试将 .so
目录添加到 PATH
:
PATH=$PATH:/Users/adamatan/workspaces/trunk/dapper/java/lib/native/macosx
以及LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH="/Users/adamatan/workspaces/trunk/dapper/java/lib/native/macosx"
打印java.library.path
我打印了 java.library.path
,以查看 Eclipse 环境中的更改是否已传播到 JVM:
System.out.println(System.getProperty("java.library.path"));
得到:
/workspace/dapper/java/lib/native/macosx:....
我在 Eclipse 配置中放置的确切值。
调试思路?
我对上述所有解决方案都遇到了完全相同的错误。知道如何调试这个问题吗?我可以从 Java 获得更详细的错误消息吗?文件未找到或未加载?如果没有加载,这是为什么?
最佳答案
我可能读错了,但听起来您已将 native 库 (libfedel_client.so
) 从 Linux 服务器复制到您自己的 Mac。如果是这样的话,这肯定是行不通的。您无法在 Mac 上使用 Linux native 库,您需要在 Mac 上重新编译它以生成 libfedel_client.dylib
。
根据您使用的 Apple Java 运行时的版本,您可能需要使用 .jnilib
扩展名。早期运行时使用 .jnilib
扩展名而不是 .dylib
,并且这两个扩展名仍然受支持(尽管 .dylib
现在是默认值。)
关于java.lang.UnsatisfiedLinkError : no <LIBRARY> in java. 库.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13787849/