通過JNI對C++進行封裝

Mindydog發表於2021-01-01

對目前的進展做一下記錄

Windows下的C++庫移植出現了眾多問題,其中最為棘手的就是Windows下的微軟C++函式庫的處理,由於產品部門早期並沒有考慮到國產化程式碼移植這一塊,所以在程式碼中使用了眾多的微軟C++庫,目前遇到的兩座大山分別是Windows下的OleAuto.dll和conutil.dll,這兩個庫必須在Linux下自行實現,目前沒有比較合適的技術路線可以選擇,只能硬著頭皮上,後續會更新這兩個庫的升級進展

目前web端需要的是Java介面,我們採用了JNI來進行C++層面的封裝,技術路線已經走通,後續會上傳最新的程式碼以供學習使用,這裡整理遇到的兩個致命問題

1.找不到C++庫,問題描述為”no xxx in java.library.path“
解決方案簡單粗暴,把生成的so放在java.library.path所包含的路徑下即可,由於工程程式碼編譯之後生成的庫較多,因此需要修改java.library.path中的路徑,目前沒有合適的技術方案可以實施,可以通過Java程式碼對java.library.path進行輸出檢視java.library.path所包含的路徑,其中一個是/usr/lib/,我也是把so放在了這裡
2.找不到本地函式,問題描述為”no xxx V“
解決方案為
Java中System.loadLibrary(”libraryName“)中的libraryName為JNI程式碼生成的so庫,並非底層C++程式碼庫,因此找不到本地函式的實現也是情理之中,後續會上傳程式碼

提一下這邊的總體路線:
C++底層函式庫->JNI層函式庫->Java層函式庫->上傳到伺服器生成Web端微服務->供Web端進行呼叫
小組遇到的技術難點為微軟C++函式庫編譯(需要自行實現)、JNI層封裝(下週會進行講座進行新技能彙報)
以上

相關文章