我使用GCC編譯了包含在CFLAGS
中的-O3 -fast-math
的一些C代碼。我很困惑在鏈接時是否也將這些標誌傳遞給GCC,即將-Wl,-O3 -Wl,-fast-math
放置在LDLIBS
中。給予GCC連接器的優化標誌的效果
確切地說-Wl,<...>
是做什麼的,爲什麼我們需要在CFLAGS
和LDLIBS
中通過相同的選項?
此外,有沒有任何特定於平臺的鏈接器相對於這些標誌進入鏈接器的行爲?
我使用GCC編譯了包含在CFLAGS
中的-O3 -fast-math
的一些C代碼。我很困惑在鏈接時是否也將這些標誌傳遞給GCC,即將-Wl,-O3 -Wl,-fast-math
放置在LDLIBS
中。給予GCC連接器的優化標誌的效果
確切地說-Wl,<...>
是做什麼的,爲什麼我們需要在CFLAGS
和LDLIBS
中通過相同的選項?
此外,有沒有任何特定於平臺的鏈接器相對於這些標誌進入鏈接器的行爲?
選項-Wl,...
指導GCC傳遞...
直經爲 鏈接,ld
,如果調用鏈接。
編譯器優化選項-O0, -O1
等不被鏈接器 識別,如果通過則忽略。編譯器優化選項 -ffast-math
與不相關的ld
選項-f<so_name>
, 發生衝突,鏈接器僅接受-shared
。因此 如果-shared
不通過,一個ld
使用錯誤的結果:
/usr/bin/ld: -f may not be used without -shared
並且如果-shared
通過,則fast-math
將被誤解 作爲<so_name>
。如果傳遞給ld
,則 表-f...
的任何其他編譯器選項也適用。
這裏是the GCC commandline options reference 這裏是一個 GNU ld
如果用GNU建設作出,本作變量LDLIBS
是連接庫選項(-l...
)常規 保留。其他鏈接選項 在LDFLAGS
通常通過查看來自binutils的(包括BFD和黃金)this answer
鏈接器不認識'-O'選擇,他們確實有一定的效果,但一個相當小的一個。 –