【问题标题】:java.lang.UnsatisfiedLinkError in LinuxLinux 中的 java.lang.UnsatisfiedLinkError
【发布时间】:2010-10-07 00:52:06
【问题描述】:

我已经设法进入一台 linux 机器来尝试 this answer. 中建议的 HotKey 库

我已经编译了示例代码,现在我运行程序并收到以下消息:

[oracle@machine jxgrabkey-0.2.1_i386]$ java -classpath lib/JXGrabKey.jar: 示例 JXGrabKeyTest 线程“主”中的异常**java.lang.UnsatisfiedLinkError:** /home/oracle/javasample/jxgrabkey-0.2.1_i386/lib/libJXGrabKey.so:/usr/lib/libstdc++.so.6:版本`GLIBCXX_3。 4.9' 未找到(/home/oracle/javasample/jxgrabkey-0.2.1_i386/lib/libJXGrabKey.so 需要) 在 java.lang.Runtime._load(libgcj.so.7rh) 在 java.lang.Runtime.load(libgcj.so.7rh) 在 java.lang.System.load(libgcj.so.7rh) 在 JXGrabKeyTest.main(JXGrabKeyTest.java:17)

我知道如何在 Windows 中处理这个问题(只需将 DLL 添加到 PATH env var 中),但我对 linux 不太确定。

我已经阅读了一些关于 LD_LIBRARY_PATH 和其他一些环境变量的内容,但我可以让它工作。

有什么建议吗?

编辑

在 mmyers 的支持下确定问题并阅读 this threadthis other

我知道:

我的系统是:Linux 2.6.18-53.el5

我的 GCC 版本是(是):

gcc-c++-4.1.2-14.el5

gcc-gfortran-4.1.2-14.el5

libgcc-4.1.2-14.el5

gcc-4.1.2-14.el5

问题是我需要 gcc 4.2.0

显然我的系统没有 gcc 4.2.0。

我想我得等它来或作者在以前的版本中重新编译它。

mmyers,非常感谢您的帮助。

【问题讨论】:

    标签: java linux java-native-interface native


    【解决方案1】:

    你试过-Djava.library.path=/path/to/library吗?

    编辑:重新阅读错误消息,在我看来,您正在加载的本机库正在尝试链接到 glibc 版本 3.4.9,这显然没有安装。你能检查一下你有什么版本的 glibc 吗?您正在运行什么 Linux 发行版?

    EDIT2: 问题似乎已缩小到 libstdc++。我即将达到我的知识边缘,但this thread 可能有用。它建议升级到 gcc 4.2;从 cmets 来看,您似乎拥有 4.1.2 版本。如果这不起作用,请告诉我。

    【讨论】:

    • 实际上,从错误来看,您正在加载的库似乎正在尝试链接到您没有的 glibc 版本。
    • @mmyers@your 编辑:当然。我怎么做? :S ... 有类似 glibc -version 的东西吗? ....
    • glibc 不是可执行文件,因此它不起作用。你在运行什么发行版?
    • uname -rs 带给你什么?
    • uname -rs 生成 Linux 2.6.18-53.el5,我想我找到了命令:rpm -q glibc 返回 glibc-2.5-18
    【解决方案2】:

    subes,这里是 JXGrabKey 开发者 ...

    我自己对这个错误了解不多,但是您对 gcc 和/或 libstdc++ 的领导应该是正确的

    我个人使用的是 Ubuntu 8.10 atm 附带的 gcc 版本。我总是坚持使用最新发布的版本。

    当前版本:g++ (Ubuntu 4.3.2-1ubuntu12) 4.3.2

    我的机器上安装了以下 libstdc++ 软件包: http://packages.ubuntu.com/intrepid/libstdc++5 http://packages.ubuntu.com/intrepid/libstdc++6

    希望这会有所帮助,如果您发现任何有用的信息,请告诉我。 :) 也许我必须用旧版本的 gcc 编译 jxgrabkey 才能发布,所以它向下兼容?有没有人有明智的建议? ^^

    【讨论】:

    • 你好!感谢您的答复。是的,实际上在其他论坛中进一步挖掘,问题出在编译器上。所以,由于 C++ 代码可用,我用我的 gcc 版本重新编译它,但是我得到了 _ZNSs4_Rep20_S_empty_rep_storageE :-( :-( 我会尝试在我的安装中获取那个 g++。Tnx
    • 好的,如果你找到更多关于它的信息,请告诉我你是否设法让它工作,如果你能在 sourceforge 上的 jxgrabkey wiki 上写一篇关于这个的 wiki 文章会很好 ^^ 所以如果其他人有同样的问题,他们可以按照你的指导。 (也许我可以发布兼容性版本)
    • @subes 我在Ubuntu 14.06 上遇到了与WindRiver Workbenck 相同的问题。我已经安装了上面建议的软件包,但它仍然对我不起作用......你还有什么进一步的线索吗?我读到你重新编译了 C++ 编译器,这也是我必须做的吗?我当前的 gcc 版本是 5.4.0
    • 您不需要重新编译 C++ 编译器,而是必须使用您自己的本地编译器重新编译 libjxgrabkey.so,以便它链接到您的 libstdc++ 版本。只需运行 jxgrabkey/trunk/misc/Ant/build.xml 来从这个 subversion repo 构建一个版本:sourceforge.net/p/jxgrabkey/code/HEAD/tree(你需要安装 ANT ant.apache.org 和一些用于 X11 等的开发人员 c++ 依赖项)
    • 您可以在此处找到有关如何执行此操作的更详细说明:sourceforge.net/p/jxgrabkey/bugs/6 也许这也有帮助:sourceforge.net/p/jxgrabkey/bugs/8
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多