首先,对于你们所有人来说,这可能是一个非常菜鸟的问题。但正如他们所说,如果您不问,您如何学习?
所以,事情是这样的:
我们开发了这个 .JAR 文件以在 Java 1.4 下工作,并安装在 SUSE 9 Enterprise Server 中。
我们也在不同的平台上进行了测试: - Suse 9 企业服务器 32 位 + JDK 1.4.2_08 + LIBSTDC++.SO.6: 运行顺利,没有返回错误。
Red Hat 5.5 服务器 64 位 + JDK 1.4: 运行顺利,没有返回错误。
Suse 9 Enterprise Server 64 位 + JDK 1.4.2_08(32 位)+ LIBSTDC++.SO.6: 如果我使用程序的 32 位库,它会返回一条错误消息: “线程“main”中的异常 java.lang.UnsatisfiedLinkError:/usr/lib/MySharedLibrary.so:/usr/lib/MySharedLibrary.so: undefined symbol: NFQuality”
但是,如果我使用程序的64 位库,它会返回此错误: “线程“主”java.lang.UnsatisfiedLinkError 中的异常:/usr/lib64/MySharedLibrary64.so:/usr/lib64/MySharedLibrary64.so:无法打开共享对象文件:没有这样的文件或目录
我试过为 java -Djava.library.path 命令提供 MySharedLibrary 所在的路径,但没有成功。
我的问题是:
如果它确实具有与 Suse 9 32 位完全相同的配置,为什么它会在 Suse 9 64 位中返回错误?
我知道架构之间存在差异,好的。但这不是架构编译问题,因为在 64 位的 RedHat 5.5 中它确实可以运行。
谁能指导我解决这个难题?我可能的解决方案是什么?
谢谢你们所有的大师。
最佳答案
您不能从 32 位 JVM 链接 64 位库。如果要链接 64 位库,请使用 64 位 java。
至于 undefined symbol 。您的链接可能已损坏,因为 suse 缺少 redhat 上存在的某些库。我认为如果不了解更多关于 MySharedLibrary.so
的信息,就无法回答这个问题。
关于java - Java 1.4 和 Suse 9 的 32 位和 64 位共享库行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9727026/