2014-01-19 124 views
1

我正在使用GCC 4.4.2建設一些大型項目。由於我想構建它以便發佈,因此我使用-O1 GCC優化標誌,但不幸的是它以我的代碼以某種方式混亂,並且最終的二進制文件無法按預期工作,因此在使用-O0標誌(或不進行優化)構建時一切正常。 我曾經遇到過類似的問題,那時我的-fstrict-aliasing標誌引起了-O2優化級別的麻煩,我設法通過搜索所提到的所有標誌來發現它是由特定標誌引起的本文檔中,關於-O2優化級別:隱形GCC優化標誌?

http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Optimize-Options.html

現在我試着做他們提到關於-O1標誌列表相同,但不幸的是它似乎並不是所有的標誌所提到的,或者有一些隱藏標誌被啓用,因爲當我編譯只有-O1標誌或只提供了一個f列表滯後(沒有把-O1本身),我得到不同的編譯結果,我的二進制文件拒絕只與特定-O1標誌工作,所以我無法找到確切滋事選項。

是否有可能知道-O1選件包含哪些隱藏選項,以及如何禁用其中一些選項?

+7

這聽起來像你調用未定義的行爲。也許最好是啓用-Wall和-Wextra並嘗試更正代碼? – EOF

+0

您的代碼中可能存在副作用,序列點和/或(un)嚴格別名。 – wildplasser

+0

gcc 4.4.2很早就發佈了。你爲什麼不試試gcc 4.8或更新版本 –

回答

0

您可以在小C文件上運行gcc -Q -v以讓GCC轉儲正在使用的選項。 使用和不使用-O1選項運行它,以獲得啓用的選項之間的差異。