[英]What is LD_LIBRARY_PATH and how to use it?
我參與了一個 Java 項目的開發,該項目使用了一些 C++ 組件,因此我需要Jacob.dll
。 (在 Windows 7 上)
我不斷收到java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path
無論我把 Jacob.dll 放在哪里......
我尋找可能的決定,到目前為止我還沒有嘗試過的決定是設置LD_LIBRARY_PATH
變量,指向 .dll 文件。
我幾乎沒有經驗,我不熟悉該變量的含義和用法 - 你能幫我嗎?
LD_LIBRARY_PATH
是 Linux/Unix 中預定義的環境變量,它設置鏈接器在鏈接動態庫/共享庫時應該查看的路徑。
LD_LIBRARY_PATH
包含以冒號分隔的路徑列表,鏈接器優先考慮這些路徑,而不是標准庫路徑/lib
和/usr/lib
。 仍然會搜索標准路徑,但只有在LD_LIBRARY_PATH
中的路徑列表用完之后。
使用LD_LIBRARY_PATH
的最佳方法是在執行程序之前立即在命令行或腳本中設置它。 這樣新的LD_LIBRARY_PATH
與系統的其余部分隔離。
示例用法:
$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"
$ ./program
由於您談論.dll
您在 Windows 系統上,並且.dll
必須放置在鏈接器在鏈接時搜索的路徑中,在 Windows 中,此路徑由環境變量PATH
,因此將該.dll
添加到PATH
和它應該可以正常工作。
通常,您必須在 JVM 的命令行上設置java.library.path
:
java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass
LD_LIBRARY_PATH
是 Linux 特定的,它是一個環境變量,指向動態加載程序應在其中查找共享庫的目錄。
嘗試在 PATH 變量中添加 .dll 所在的目錄。 Windows 將自動在此環境變量中列出的目錄中查找。 LD_LIBRARY_PATH
可能無法解決問題(除非 JVM 使用它 - 我不知道)。
LD_LIBRARY_PATH
是默認庫路徑,用於檢查可用的動態庫和共享庫。 它特定於 linux 發行版。
它類似於 windows 中的環境變量PATH
鏈接器在鏈接時檢查可能的實現。
我的錯誤還與服務找不到所需的.so
文件有關。 我使用LD_LIBRARY_PATH
變量來優先鏈接器選擇的路徑來搜索所需的庫。
我將 service 和.so
文件都復制到了一個文件夾中,並將其提供給LD_LIBRARY_PATH
變量作為
LD_LIBRARY_PATH=. ./service
在同一個文件夾中,我給出了上面的命令並且它起作用了。
好吧,錯誤消息告訴您該怎么做:將 Jacob.dll 所在的路徑添加到 java.library.path。 您可以像這樣在命令行上執行此操作:
java -Djava.library.path="dlls" ...
(假設 Jacob.dll 在“dlls”文件夾中)
另請參閱java.library.path 中的 java.lang.UnsatisfiedLinkError no *****.dll
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.