Linux中的java.lang.UnsatisfiedLinkError

时间:2009-02-11 21:26:33

标签: java linux java-native-interface native

我设法进入linux机器试用this answer.中建议的HotKey库

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

[oracle@machine jxgrabkey-0.2.1_i386]$ java -classpath lib/JXGrabKey.jar:Example JXGrabKeyTest

Exception in thread "main" **java.lang.UnsatisfiedLinkError:** /home/oracle/javasample/jxgrabkey-0.2.1_i386/lib/libJXGrabKey.so: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /home/oracle/javasample/jxgrabkey-0.2.1_i386/lib/libJXGrabKey.so)
   at java.lang.Runtime._load(libgcj.so.7rh)
   at java.lang.Runtime.load(libgcj.so.7rh)
   at java.lang.System.load(libgcj.so.7rh)
   at JXGrabKeyTest.main(JXGrabKeyTest.java:17)

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

我已经阅读了一些关于LD_LIBRARY_PATH和其他一些env vars的内容,但我可以使它工作。

有什么建议吗?

修改

在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

Aaand显然我的系统没有gcc 4.2.0。

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

mmyers,非常感谢你的帮助。

2 个答案:

答案 0 :(得分:5)

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

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

EDIT2:问题似乎缩小到了libstdc ++。我即将知晓,但this thread可能会有用。它建议升级到gcc 4.2;从评论中,您似乎有4.1.2版本。如果这不起作用,请告诉我。

答案 1 :(得分:1)

subes,JXGrabKey dev here ...

我自己对此错误了解不多,但您对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用于发行版,因此它是向下兼容的吗?有没有人有明智的建议? ^^