簡體   English   中英

如何修改傳遞給ld的選項,而無需重新編譯gcc

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM