empty/missing DT_HASH in "libxxx.so" (built with --hash-style=gnu?)

問題:在將開發的App放到Android4.4版本的手機上運行時,發現so庫執行報了個錯誤:

java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH in "libxxx.so" (built with --hash-style=gnu?)

網上查詢了相關資料,有以下幾種方法:

1. 參考 https://blog.csdn.net/keial/article/details/94748526

測試結果:加了之後沒有起到效果。

2. 參考https://www.cnblogs.com/mthoutai/archive/2017/05/31/6922784.html

由於項目裏用的是cmake編譯NDK,所以沒法用上面的方式直接配置,於是又陷入查詢對應的cmake配置方法,花了好多時間。。最終在CMakeLists.txt中添加

set(CMAKE_LINK_DEF_FILE_FLAG "Wl,-hash-style=sysv") //跟圖片上第一個配置項應該是匹配的

第二個配置項沒能從CMakeLists.txt的提示中查到對應配置項故沒能設置。編譯之後,發現還是沒解決問題。

3. 最終解決方案:修改build.gradle的minSdkVersion,從29改爲19,重新編譯so就可以了。之前沒注意minSdkVersion被設成29,而且在Android8.0上也可以正常執行,沒想到Android4.4的就運行不了,可看出minSdkVersion在NDK編譯也是有起到的相關作用的,需要根據設備版本做對應配置。

參考:http://blog.sina.com.cn/s/blog_8acf1be10102w6x1.html

 

 

 

 

 

 

 

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