這是一個很大的坑。在裏面遨遊了兩天時間,很無語
注:.dll是運行在Windows環境的。想要在Linux環境運行就是.so文件(.so就是和.dll文件一樣,只不過是適用的系統環境不一樣而已)
業務:
我的業務是需要調用dll文件,返回一個json格式的結果。
我們有多個應用。其中有上位機應用服務是運行在Windows環境的。因此Linux環境上的那個應用需要調用dll的接口裏面組裝我我們自己的業務,然後接口裏面通過http去請求上位機上的接口,來調用dll文件。
起初。這個上位機在eclipse上是可以直接調用dll文件去運行的。但是idea是無法運行的。
然後上位機這個打成jar包(dll文件放在和src同級、以及src\main\resources下,還有打成war),運行在本地,報了很多錯。
類似於下面的。
各種百度說是什麼環境變量裏面配置,
什麼把dll文件複製到C:\Windows\System32、jre\bin等等路徑裏面、eclipse上的配置等等各種試,還說是缺少什麼dll文件讓下載。將dll放在java.library.path包含的路徑中。都不行。
認真分析一下,eclipse上能運行,肯定就是dll文件放的位置不對。不可能是缺少什麼dll文件都不行。
一直的誤區是:System.loadLibrary("dll文件名,沒有後綴");掃描的事jar包內或者war內的。
所以一直在這裏轉圈圈。最後在打成jar包。在桌面創建一個文件夾,把jar包和所要用的dll文件都複製進入都是同級。結果測試就ok。感覺真滴很坑。
以上分享給大家。具體我也不太清楚我這個方法是否適用你,但是我目前是ok了。
有什麼不足之處,還希望請教大家。
在eclipse上配置後調用執行正常,但是在idea中就不行。一共有三個類型的錯,大概的意思都是下面這個截圖中的報錯
主要的方法是:將比如將一個jar包放在Windows環境的卓某一個文件夾中,那麼把所有的dll文件複製進入,和這個jar同級目錄。啓動這個jar,就可以正常的調用了
public class Demo {
public native int sum(int a,int b);
public static void main(String[] args) {
int a = 2;
int b = 6;
int c;
Demo d = new Demo();
c = d.sum(a, b);
}
public int getSumAB(int a, int b){
Demo d = new Demo();
int sum = d.sum(a, b);
return sum;
}
static
{
System.loadLibrary("dll文件名,沒有後綴");
}
}