背景
發現一個小問題,歸檔專案部署包中竟然沒有第三方 JNI 庫,它是一個用 C 語言實作的 .so 檔案,這導致專案部署的時候報 JNI 加載失敗錯誤,具體怎么回事兒呢?
加載 JNI 例外問題
有一個專案的權限校驗功能為了增加一點點可靠性,而采用 C 實作的,雖然 C 也能反編譯,但是多少增加了一點成本,所以心理感徑訓是靠譜一點,C 編譯后的庫函式是一個 .so 檔案,放在專案 bin 目錄下,
昨天從 SVN 檢出部署包部署時,應用報了一個錯:
java.lang.UnsatisfiedLinkError: Can't load library: /app/bin/xxx.so
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
定位發現 bin 目錄下沒有 .so 庫檔案,懷疑是 SVN 上傳的問題,
驗證 SVN 對 so 檔案的行為
驗證了一下,新增五個檔案,三種不同型別,右鍵“commit" 操作時,無版本的新檔案中只有兩個:

問題根源,右鍵 SVN 配置資訊,ignore 串列中包含了幾種:

解決辦法
移除上述紅框中的 *.so 配置即可:

啟示錄
為什么默認檔案排除了 .so 檔案呢?可能是為了安全吧,自定義庫畢竟是外來的,不一定靠譜,
大概現在用 SVN 的公司很稀少了吧,前兩天有網友評論說還用 SVN 的公司,技術應該也很落后,工具也存在鄙視鏈啊,看來我也得補充一點 Git 的知識了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186468.html
標籤:其他
下一篇:IPFS的檔案存盤模式
