2011-08-22 73 views
25

我參與開發一個Java項目,它使用了一些C++組件,因此我需要Jacob.dll。 (在Windows 7)什麼是LD_LIBRARY_PATH以及如何使用它?

我不斷收到java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path無論身在何處,我把Jacob.dll ....

我尋找可能的決定,而我至今沒有試過被設置LD_LIBRARY_PATH變量之一,指向.dll文件。

我幾乎沒有經驗,我不熟悉該變量的含義和用法,你能幫我嗎?

+0

谷歌: 「的java.library.path」 ...點擊任何鏈接,談論這個和DLL ... – Nim

+1

,這裏是我之前做的一個:http://www.inonit.com/cygwin/jni/helloWorld/load.html – Nim

+0

如果您使用的是Windows和需要加載該dll,使用「PATH」系統變量或將dll放在Windows/System32目錄中。 Windows中不使用LD_LIBRARY_PATH。 –

回答

24

通常必須在JVM的命令行上設置java.library.path

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass 
+0

這是正確的! (+1) –

+0

mmm ...但是...什麼是LD_LIBRARY_PATH? – JPCF

33

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,它應該可以正常工作。

7

LD_LIBRARY_PATH是Linux特有的,它是一個指向動態加載器應該查找共享庫的目錄的環境變量。

嘗試添加您的.dll在PATH變量中的目錄。 Windows將自動查找此環境變量中的目錄listet。 LD_LIBRARY_PATH可能不會解決問題(除非JVM使用它 - 我不知道這一點)。

+0

謝謝,顯然這不適合我。否則,將項目添加到PATH變量是我首先做的事情......迄今爲止沒有運氣:) – karla

+0

我不是Java開發人員,但是您可以嘗試打印java.library.path變量(使用System。的getProperty())?你也可以嘗試在啓動虛擬機時用-D命令行標誌來設置這個變量 - 甚至可以在運行時設置它。如果您在Eclipse imho中工作,可以在項目屬性的「構建路徑」設置中設置類似「本地庫位置」的方法。 –

+2

不是Linux!所有的Unix使用這個環境變量!它也不是用於鏈接,而是用於加載!靜態鏈接庫通常在命令行上給鏈接器,動態加載的鏈接庫通過LD_LIBRARY_PATH查找。見例如http://linuxmafia.com/faq/Admin/ld-lib-path.html –

1

好了,錯誤信息告訴你該怎麼做:地方添加Jacob.dll駐留到的java.library.path路徑。你可以這樣做,像這樣的命令行:

java -Djava.library.path="dlls" ... 

(假設Jacob.dll處於 「的dll」 文件夾)

另見java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

+3

JVM啓動後,您不能通過這種方式設置'java.library.path'。 –

相關問題