1. 程式人生 > >動態連結警告:creating a DT_TEXTREL in object

動態連結警告:creating a DT_TEXTREL in object

前一段時間將一個模組做成動態庫的過程中,編譯.so的時候有一個警告:creating a DT_TEXTREL in object。

但是明明makefile裡面是有加fPIC的,不知為何還會生成DT_TEXTREL。

導致裝置啟動的時候載入.so檔案的時候,彈出了“Can't modify /lib/libispfront.so's text section. Use GCC option -fPIC for shared objects, please.”

對著makefile瞅了半天,也沒發現哪裡有問題。

問題實際上出在這個.so檔案所連結的一個靜態庫上,這個靜態庫編譯的時候是沒加fPIC的,所以生成的程式碼不是地址無關的,

導致的最終結果是生成的.so中一半地址無關程式碼,一半地址相關需要重定位的。

正常來說這種.so應該也是能正常載入的,但是不知為何,可能連結器做了什麼我不瞭解的限制,只加載fPIC的.so,

或者是連結器連結的時候有什麼選項沒有選對?

但是,可悲的是這個靜態庫的原始碼隨著部門劃分划走了,所以拿不到原始碼,也就無法重新編譯。

最終想了另外一個辦法饒了過去,將這個靜態庫從.so中拎了出來,放在可執行程式中,然後就只把能編譯的程式碼編成.so。

問題暫時是繞過去了,但是這個降低耦合的目的沒有達到,起碼是事倍功半。。。