java.lang.UnsatisfiedLinkError:java.library.path </library>中没有<library>

时间:2012-12-09 13:34:03

标签: java eclipse java-native-interface shared-libraries

问题

我一直在尝试在自己的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:...

创建符号链接

我已经创建了一个从fedel_clinetfedel_clinet.so的符号链接,以防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获得更详细的错误消息吗?文件未找到或未加载?如果没有加载,为什么会这样?

1 个答案:

答案 0 :(得分:4)

我可能读错了,但听起来你已经将本地库(libfedel_client.so)从Linux服务器复制到了自己的Mac上。如果是这种情况,这肯定不会起作用。您无法在Mac上使用Linux本机库,您需要在Mac上重新编译它以生成libfedel_client.dylib

根据您使用的Apple Java运行时版本,您可能需要使用.jnilib扩展名。早期运行时使用.jnilib扩展名而不是.dylib,并且仍然支持这两种扩展名(尽管.dylib现在是默认值。)