簡體   English   中英

無法打開共享庫文件-Java中的C ++庫

[英]Cannot Open Shared Object file - C++ library in Java

我正在嘗試在Java代碼中使用C ++編譯的庫。 我將java.library.path設置為/usr/local/lib/並且在那里安裝了庫的所有.so文件。

但是,當我嘗試運行Java應用程序時,會看到以下內容:

Native code library failed to load. 
java.lang.UnsatisfiedLinkError: /usr/local/lib/libA.so: libB.so.2.4: cannot open shared object file: No such file or directory

但是文件似乎在那里:

ls /usr/local/lib/libB.so.2.4
lrwxrwxrwx 1 root root 20 Jan 24 16:33 /usr/local/lib/libB.so.2.4 -> libB.so.2.4.5

符號鏈接文件也存在。 知道為什么找不到該庫嗎?

Java能夠為庫AlibA.so )加載本機代碼,並且在運行該本機代碼時,它依賴libB.so (但是,此時它在本機代碼中-在JVMs控件之外)。 此時,您必須使用系統上的本機庫。 通常的機制是設置LD_LIBRARY_PATH環境變量使用ldconfig (根據手冊頁),其中部分內容是

ldconfig創建必要的鏈接並緩存到在命令行指定目錄,/ etc / ld.so.conf文件以及受信任目錄(/ lib和/ usr / lib)中找到的最新共享庫。 緩存由運行時鏈接程序ld.so或ld-linux.so使用。

如果使用的是WebLogic:確保在weblogic的wlstart -script中有一個名為USTART_LD_LIB的系統變量,該系統變量將覆蓋LD_LIBRARY_PATH變量。 因此,您需要設置此變量,並將lib附加到此變量,同時還要設置LD_LIBRARY_PATH

原因是您無法在手動啟動應用程序之前繼續導出變量。

暫無
暫無

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

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