OpenJDK 64位服务器虚拟机警告:您已加载可能禁用堆栈保护的库。

8

有人能帮我解决这个错误吗?

我在使用jNetpcap API编译eclipse项目时出现了问题。

我按照下面网站上提到的步骤设置了Debian环境:

http://jnetpcap.com/compile/debian

但是我仍然遇到以下错误信息:

choosedevice ... OpenJDK 64-Bit Server VM warning: You have loaded library /usr/lib/libjnetpcap.so.1.3.b0003 which might have disabled stack guard. The VM will try to fix the stack guard now. It's highly recommended that you fix the library with 'execstack -c ', or link it with '-z noexecstack'. Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/lib/libjnetpcap.so.1.3.b0003: /usr/lib/libjnetpcap.so.1.3.b0003: mauvaise classe ELF : ELFCLASS32 (Possible cause: architecture word width mismatch) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880) at java.lang.Runtime.loadLibrary0(Runtime.java:849) at java.lang.System.loadLibrary(System.java:1088) at org.jnetpcap.Pcap.(Unknown Source) at main.Main_app.choosedevice(Main_app.java:74) at main.Main_app.main(Main_app.java:273)

顺便说一句,我尝试执行“execstac -c”,但根本不起作用。 我花了几天时间试图找出解决方案,目前唯一的结论是需要使用libjnetpcap.so(64位),因为我的Debian是64位架构。 那么这就是我需要做的吗?

PS:我找不到任何64位“.deb”安装此库。


4
如果您想使用32位原生库,您必须使用32位的Java虚拟机。 - Brett Okken
还有其他解决方案吗?使用JVM 64位。 - Sam Ben
2
获取本地库的64位版本 - 在/usr/lib而不是/usr/lib64中检查。 - Brett Okken
1
您可能需要检查您的 LD_LIBRARY_PATH 环境变量。如果您正在使用 64 位 jvm 运行,则 /usr/lib 不应该是 LD_LIBRARY_PATH 的一部分,而 /usr/lib64 应该是。 - Brett Okken
@BrettOkken:我在RHEL上运行32位库时遇到了类似的问题。我该如何在RHEL 7上使用32位JVM? - Kevin
@BrettOkken 确保你正在使用正确的库。由于你有32位JVM,所以应该使用32位Lib。 - Sam Ben
1个回答

0

文件 /usr/lib/libjnetpcap.so.1.3.b0003 包含什么内容?

如果该文件是一个0字节文件,那么系统可能存在问题,请尝试通过重新安装该库来修复。

我在smartgit中遇到了同样的问题,在本地配置文件夹中使用了一个某种程度上已损坏且为0字节文件的库。因此,删除配置文件夹并重新启动应用程序对我有用。这也可能是这里的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接