A. java 調用動態鏈接庫(jni方式調用dll文件)
jni 是由Java調用C/C++的動態鏈接庫 (DLL)。
所以把.class-->.h-->dll ,想法是不正確的,
同時也違背了Jni的初衷。
Dll是由C/C++生成的。
以前的一個項目用到了Java調用C/C++的DLL,所以對這個還算熟悉。
那個dLL是由C++程序員寫的,在Microsoft Visual C++ 6.0編輯器中可以生成。然後由Java程序員用JNI來調用DLL裡面實現的功能(方法)。
B. 如何為Android,Mac和Windows平台創建Java JNI動態鏈接庫
Android1、下載NDK,並在Eclipse中配置路徑:
2、創建一個Android工程hellojni。右鍵工程,選擇Add Native Support自動生成C/C++工程:
3、修改C/C++代碼,配置一下Android.mk:
4、點擊保存就會自動生成動態鏈接庫libhellojni.so。也可以通過命令ndk-build手動生成。
Windows
1、打開Visual Studio,創建一個Win32工程hellojni:
2、在應用類型中選擇DLL:
3、配置頭文件和庫的路徑:
4、點擊build就可以生成hellojni.dll。
Mac OS X
1、打開Xcode,創建一個工程hellojni :
2、framework選擇STL:
3、在build設置里,配置JavaVM 頭文件路徑和庫路徑:
4、點擊build就可以生成libhellojni.dylib。
Java工程中如何使用JNI:
1、申明native介面:
public native String stringFromJNI();
public native static void nativePrint();
2、載入動態鏈接庫:
static {
System.loadLibrary("hellojni");
}
C. eclipse中的java工程項目如何引用外部jar包和dll動態鏈接庫
1、引用jar包
絕對路徑引用:右鍵工程-->properties-->Java Build Path-->Libraries-->Add external JARs... ,在彈出的對話框中選擇要引入的jar包,OK即可。
相對路徑引用:首先在工程目錄下,新建一個libs文件夾,將要導入的jar包放入其中,然後右鍵工程-->properties-->Java Build Path-->Libraries-->Add JARs... ,在彈出的對話框中選擇libs文件夾下的jar包即可。
2、引用dll動態鏈接庫
絕對路徑引用:右鍵工程-->properties-->java Build Path-->Source,點開工程,選擇Native libraries location....,點擊右側的edit..-->external Folder...,選擇要引入的dll文件所在文件夾即可。
相對路徑引用:首先在工程目錄下,新建一個libs文件夾,將要導入的dll文件包放入其中,右鍵工程-->properties-->java Build Path-->Source,點開工程,選擇Native libraries location....,點擊右側的edit..-->Workspace..,選擇libs文件夾即可。
D. java動態鏈接庫連接失敗 jvm.dll載入失敗
項目中用到 Jpcap 庫,這個庫引用到一個 C 的鏈接庫文件
鏈接庫文件放到 /usr/lib 下面
以前在別的Linux系統下都運行的好好的
今天部署到一個 Centos 機器上就報錯:java.lang.NoClassDefFoundError: Could not initialize class jpcap.JpcapCaptor 和 java.lang.unsatisfiedlinkerror
看了下 JpcapCaptor 類的源碼發現裡面有載入動態鏈接庫的代碼
肯定就是沒找到 動態鏈接庫文件了。
1.重新編譯庫文件 2.把庫文件放到項目根目錄,等等幾番折騰
最後都要絕望的時候了,突然想起 /etc/ld.so.conf
vi 一看還真沒有庫目錄
加上兩行
/usr/lib
/usr/local/lib
保存 執行 ldconfig命令 生效
問題就這樣解決了。