gpt4 book ai didi

java - System.loadLibrary 适用于 OpenJDK 但不适用于 Oracle

转载 作者:太空狗 更新时间:2023-10-29 23:00:27 24 4
gpt4 key购买 nike

我用 C++ 实现了一个 SDK(用 C 导出的 API)。此 SDK 编译为 Windows 的 DLL 和 Linux 的 .so。我还使用 JNA 实现了一个 Java 包装器。这个包装器附带 .so 和 DLL,我在运行时检查哪个操作系统正在运行并将其解压缩到开发人员指定的文件夹中。它运行良好。

问题是一位使用 Linux 的客户(我在 Linux 上只有几个客户)说库未加载时出现 undefined symbol 错误。这是错误:

java.lang.UnsatisfiedLinkError:/usr/lib/libBXSDK.so:/usr/lib/libBXSDK.so: undefined symbol : _ZTVN10__cxxabiv117__class_type_infoE

最初我认为这可能与某些标准有关。因此不存在。然后我给他发了一个非常基本的 C++ 可执行文件并让他运行。有效。然后,我向他发送了一个非常基本的 Java 应用程序,该应用程序不使用 SDK,但仅调用 System.loadLibrary("BXSDK")。将libBXSDK.so复制到/usr/lib后,运行基本的Java应用,还是报错。

然后我决定检查他的 Java 版本,并意识到他使用的是最新版本的 Oracle JDK,我看到在我运行 CentOS 7 的测试环境(客户运行 RHEL 7)上我使用的是 OpenJDK。我立即在我的测试环境中安装了 Oracle JDK,我看到了同样的问题。

所以,我的问题是。导致此问题的 Oracle JRE 和 OpenJDK (JRE) 之间有什么区别?我是不是在我的 .so 上做错了什么,以至于 OpenJDK 能够处理但 Oracle JRE 不能处理?

谢谢

最佳答案

您是否验证过该文件夹是否如本文所述:http://ubuntuforums.org/showthread.php?t=1323888

(dontexist)成员的评论通常是非常有效的,OpenJDK 能够进行调用这一事实让我想到库加载本身是否不成功。

我想,这可能不需要回答这个问题——“Oracle 和 Open JDK 在加载语义方面有什么区别”。不确定我是否可以收回这个帖子作为答案,但让其他人借此机会解释一下。

关于java - System.loadLibrary 适用于 OpenJDK 但不适用于 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33697401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com