簡體   English   中英

如何從.jar文件引用.dll

[英]How to reference a .dll from a .jar file

我有一個應用程序,該應用程序在調用.dll的.jar中使用方法。 這對我在我的機器上工作正常(當應用程序未打包或以.jar本身運行時),但是當application.jar在另一台機器上運行且系統路徑為外部.dll時,它將無法運行dll文件。

.dll是否必須位於特殊的地方? 我以為可以在系統路徑上找到它。

提前致謝

道吉

java.library.path解決方案並不總是很好:在許多情況下,您無法更改JVM參數。 更好的解決方案:

1)已經提到:將DLL與JAR放在同一目錄中,不幸的是,這使得使用這樣的JAR更加困難-現在的JAR不僅是JAR,還具有附帶的DLL

2)將DLL作為普通資源放入JAR中,在JAR啟動期間,將該DLL提取到某個位置,例如$ TMP,然后如上所述使用System.load(new File(...))。 那么這個JAR只是一個JAR,這個JAR的用戶甚至可能不知道它使用了任何DLL

您還可以使用Maven NAR插件,如果您使用Maven進行構建,該插件將非常強大。 http://duns.github.com/maven-nar-plugin/

嘗試使用:

File dll = new File([...]);

System.load(dll.getAbsolutPath());

我會將dll打包在與jar存檔相同的目錄中。

我建議將其與應用程序放在同一文件夾中。 話雖這么說,“它無法運行dll文件”有點含糊……您確定其他DLL是不同版本(不是正確加載,而不是在DLL中找不到)不是問題嗎?所有)?

另外,庫搜索路徑由java.library.path參數定義。

假設您使用的是Sun JVM,則可以通過在命令行上設置Java庫路徑來在命令行上指定本機庫的位置。

這可以通過選項“ -Djava.library.path = dll目錄”來完成

它可能取決於如何在Java源代碼中加載該庫。 您可以訪問嗎? 您可以發布代碼嗎?

如果Java代碼使用System.load(String),它將期望dll的完整路徑。

如果使用System.loadLibrary(String),則只需要庫名,並且將搜索java.library.path參數指定的位置。

暫無
暫無

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

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