我正在用Java使用JNA封裝共享庫(用C編寫)。共享庫是在內部編寫的,但該庫使用來自另一個外部庫的函數,這又取決於另一個外部庫。因此,情況是這樣的:Java:利用依賴項加載共享庫管理器
EXT1 < - EXT2 < - 內部
即內部使用外部庫ext2,它再次使用外部庫ext1。我試過的是:
System.loadLibrary("ext1");
System.loadLibrary("ext2");
NativeLIbrary.loadLibrary("internal",xxx.class);
這種方法在加載庫「ext2」時失敗,出現「UnresolvedException」;鏈接器抱怨庫中確實存在的符號「ext1」。因此,System.loadLibrary()函數不會使「ext1」的符號全局可用?當使用STDLIB函數dlopen()的爲:
handle = dlopen(lib_name , RTLD_GLOBAL);
所有符號@lib_name發現將可用於在隨後的載荷符號分辨率;我想我想要的是類似於java的各種System.loadLibrary()?
問候 - Joakim Hove
的路徑是在Java屬性'java.library.path'定義的庫? – 2011-03-24 20:48:22
那麼定位庫實際上是另一個抱怨,我已經使用System.load(full_path_to_shared_library) - 但我認爲這個問題主要是netbeans問題。加載庫「ext」時的異常處於符號解析階段,即庫已正確定位等。我認爲/恐懼這與在運行時深層調用低層dlopen()中的RTLD_GLOBAL標誌(或缺少它)有關。 – user422005 2011-03-24 21:03:52