java調用動態庫dll/so(一)前言

前言

java作爲一種開源語言與C++編譯和運行過程有着本質的不同,然而在java語言裏是可以調用C/C++動態鏈接庫的,常用的技術手段有jni和jna。

jni與jna比較

相比較而言,jni使用複雜,jna使用簡單。

jni(Java Native Interface java本地接口):如果有一個現有的.dll/.so文件,使用JNI技術調用,我們首先需要另外使用C語言寫一個.dll/.so共享庫,使用SUN規定的數據結構替代C語言的數據結構,調用已有的  dll/so中公佈的函數。然後再在Java中載入這個適配器dll/so,再編寫Java   native函數作爲dll中函數的代理。經過2個繁瑣的步驟才能在Java中調用本地代碼。因此,很少有Java程序員願意編寫調用dll/.so庫中的原生函數的java程序。這也使Java語言在客戶端上乏善可陳。可以說JNI是Java的一大弱點!

jna(Java Native Access java本地訪問):提供一組Java工具類用於在運行期動態訪問系統本地庫(native library:如Window的dll,Android的so)而不需要編寫任何Native/JNI代碼。開發人員只要在一個Java接口中描述目標native library的函數與結構,JNA將自動實現Java接口到native function的映射。

性能比較:jni > jna,實驗參考https://blog.csdn.net/drifterj/article/details/7841810

綜上比較我們採用jna技術實現調用動態庫。在maven工程pom文件中配置jna依賴即可,版本信息可點擊主頁查看發佈的最新版本號:

<dependency>
	<groupId>net.java.dev.jna</groupId>
	<artifactId>jna</artifactId>
	<version>5.3.1</version>
</dependency>

jna github主頁:https://github.com/java-native-access/jna

開發前準備

以下工具用來進行調試前對所需引用的動態庫進行依賴查看,防止出現找不到指定模塊的異常,使用方法暫且可以不看,後續使用過程中再來詳查。

系統

平臺

描述 工具名稱 使用方法
linux

依賴

查看

qt命令行工具

1.打開qt命令行工具,如下圖所示;

2.進入動態庫所在目錄;

3.使用windeployqt xxx.so直接複製當前庫依賴,xxx.so爲自己的庫

windows

depends.exe

 

1.打開軟件

2.直接拖拽動態庫dll文件至軟件

工具下載:

【depends.exe】鏈接:https://pan.baidu.com/s/13pRu5SF1R_r2swVnAsaNtQ 提取碼:9iss 

【qtcreator自帶msvc2017和mingw-x64編譯器】 鏈接:https://pan.baidu.com/s/1kJ69v4bU44ZDb23tFrdlLA 提取碼:dgq1 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章