問題:我需要將gnutls移植到Android中以便在共享庫中使用(稱爲庫A)我正在使用我的Android應用程序。使用靜態gnutls庫的共享庫有文本重定位
我已經試過什麼:我已經修改了make file爲openconnect來生成GNUTLS和它的依賴(libgmp,libnettle和libhogweed)以.a靜態庫文件,我用它們來構建靜態庫我Android項目,並引用他們在共享庫A.代碼構建和安裝正常,但在M +的設備,我得到以下運行時錯誤:
java.lang.UnsatisfiedLinkError: dlopen failed: libA.so: has text relocations
我試圖建立靜態庫時,要通過-fPIC
標誌( .a文件),並且在沒有運氣的情況下構建libA.so文件時,我始終可以在libA.so文件中看到TEXTREL條目。我確信這是因爲我之前使用libA而沒有任何問題,因爲這些新的靜態庫。 我嘗試過的其他事情:嘗試構建gnutls作爲共享庫,生成的libA.so現在沒有文本重定位,但仍然無法在運行時加載,因爲gnutls如此的文件有一個版本(例如libgnutls.so.3.0)和Android不支持版本化的庫。
具體問題:我該怎麼做:1.將gnutls作爲靜態庫而不需要文本重定位或者2.將它構建爲沒有soname的共享庫?
編輯:我看到相同的question問在openconnect郵件列表上,但沒有清楚的方法如何「先修復本地代碼中的TEXTREL」。
我看到其他的答案像這樣question和this問題與文本重定位的問題,但沒有幫助,因爲我使用的是最新的NDK構建和傳遞PIC標誌已經
的可能的複製[libavcodec.so:具有文本重](http://stackoverflow.com/questions/32346402/libavcodec-so-has-text-relocations) –
我不認爲它是重複的,因爲我使用最新的NDK構建並傳遞-fPIC標誌來構建位置獨立代碼 – Nonos
它真的和@RichardCritten提到的問題一樣,請看一看在[本頁](http://android-developers.blogspot.ru/2016/06/android-changes-for-ndk-developers.html)的「文本重定位(API 23以後實施)」部分,儘管接受對這個問題的回答只是一個解決方法,真正的事情是修復這個庫,但這是特定於庫的(從你有四個組合的事實開始)和依賴不知道你用來建立它的選項。 –