Windows端的java程序使用jni調用C++編寫的庫,原來實現過在Android和Linux端通過JNI調用C++程序,在Windows端沒有實現過,這裏記錄下幾個關鍵的點;
1、64位的dll工程,現在少有32位的平臺,所以需要通過VisualStudio編譯出64位的dll,注意屬性頁->C/C++->代碼生成/運行庫/選擇多線程調試(/MTd),參考Linux編譯選項的靜態鏈接和動態鏈接的思路就比較好理解了:
靜態鏈接:多線程(/MT)、多線程調試(/MTd)
動態鏈接:多線程DLL(/MD)、多線程調試DLL(/MDd)
動態鏈接爲D,靜態鏈接爲T。兩者的區別在於,靜態鏈接將程序所依賴的運行庫集成到了可執行文件中,可執行文件運行時不再需要運行庫;動態鏈接沒有把程序所依賴的運行庫集成到可執行文件中,可執行文件運行時需要運行庫。
推薦選擇/MTd, 這樣Java程序就不需要重複鏈接一些依賴的三方庫,或者自己寫的靜態庫;我們實現的場景就是通過一個dll工程封裝多個lib庫的工程;
2、注意Eclipse工程搜索路徑的建立:參考https://blog.csdn.net/pxhero2012/article/details/52926082