簡體   English   中英

什么是 LD_LIBRARY_PATH 以及如何使用它?

[英]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.

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