[英]How to modify options being passed to ld , without recompiling gcc
我正在嘗試使用gcc 3.4.6在solaris 2.7上編譯共享庫,該庫鏈接到靜態鏈接的c .a和.o文件。 請注意,它使用路徑“ / usr / ccs / bin / ld”中的Sun ld
在鏈接時,我得到了一長串符號和以下錯誤
ld: fatal: relocations remain against allocatable but non-writable sections
collect2: ld returned 1 exit status
然后我嘗試通過將-z textoff選項傳遞給ld來構建它。 但我越來越關注錯誤
ld: fatal: option -ztextoff and -ztext are incompatible
ld: fatal: Flags processing errors
還有什么其他方法不需要重新編譯gcc並仍然修改傳遞給ld的選項。
這些錯誤是由於將位置相關的代碼鏈接到共享庫中的結果。 這樣的代碼將導致庫不可共享,從而浪費RAM。
如果可以重建嘗試鏈接到共享庫中的所有對象,則最簡單(也是最正確)的解決方案是使用-fPIC
標志重建所有對象。
但是,有時您確實必須將無法重建的非PIC目標代碼鏈接到共享庫中,因此您需要擺脫-ztext
選項。 為此,在鏈接行中添加-mimpure-text
選項。
從命令行運行ld可執行文件(而不是通過gcc)-然后,您可以根據需要傳遞任何參數。 我認為這不會解決您的潛在問題-您可能要提出有關它們的問題。
您是否正在使用make或其他構建系統來調用編譯器?
如果您更改構建系統中的選項,以在鏈接階段專門使用鏈接器而不是使用編譯器。
步驟1:查找gcc傳遞的標志
添加-v標志。 它使gcc變得冗長。
CXXFLAGS + = -v
步驟2:修改鏈接階段,以明確使用gcc調用的工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.