簡體   English   中英

System.loadLibrary適用於OpenJDK,但不適用於Oracle

[英]System.loadLibrary works on OpenJDK but not on Oracle

我用C ++實現了一個SDK(用C導出的API)。 此SDK編譯為Windows的DLL和Linux的.so。 我還使用JNA實現了Java包裝器。 這個包裝器里面裝有.so和DLL,我在運行時檢查哪個操作系統正在運行,並在開發人員指定的文件夾中提取它。 它運作良好。

問題是使用Linux的客戶之一(我在Linux上只有幾個)表示該庫沒有加載未定義的符號錯誤。 這是錯誤:

java.lang.UnsatisfiedLinkError:/usr/lib/libBXSDK.so:/usr/lib/libBXSDK.so:unfined defined 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 = 1323288

研究員(dontexist)成員的評論總的來說非常有效,OpenJDK能夠進行調用的事實讓我想到了庫加載本身是不成功的。

我想,這可能不會回答這個問題 - “Oracle和Open JDK在加載語義方面有什么區別”。 不確定我是否可以撤回這篇文章作為答案,但讓別人借此機會解釋一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM