java調用C語言執行dll文件

這是一個很大的坑。在裏面遨遊了兩天時間,很無語

注:.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文件名,沒有後綴");
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章