【问题标题】:java.lang.UnsatisfiedLinkError: no <LIBRARY> in java.library.pathjava.lang.UnsatisfiedLinkError: no <LIBRARY> in java.library.path
【发布时间】:2012-12-09 13:34:02
【问题描述】:

问题

我一直在尝试在自己的 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 获得更详细的错误消息吗?是找不到文件,还是没有加载?如果没有加载,这是为什么呢?

【问题讨论】:

  • 它肯定是在寻找 with .so 扩展名的库。一个问题 - 你是为 OS X 重新编译库,还是只是从 linux 复制一个?如果你只是复制 linux 的,那可能就是问题所在。
  • 我没有重新编译它,但是有没有办法从java.lang.UnsatisfiedLinkError得到更详细的输出?
  • @GreyBeardedGeek:不,实际上,.so 不是 Mac OS 上共享库的扩展。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 2010-11-27
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多