除了使用-nostdlib
和鏈接crt1.o -lc -lgcc
自己,有沒有簡單的方法,以防止從GCC連接crtbegin[S].o
和crtend[S].o
?這些文件並不是那麼大,但是我正在製作小的二進制文件,並且想要刪除C程序不需要的無用的C++支持代碼。 (據推測,如果你使用C++庫和全局對象變量,gcc甚至可以將它們鏈接到C程序中,我會告誡大家應該如何在全局對象引用的地方生成安全的一次性初始化調用C++模塊,而不是main
之前初始化的全局對象...)有沒有一種簡單的方法可以讓gcc忽略crtbegin.o/crtend.o?
我不會反對黑客攻擊的GCC specs
文件,使C++這樣,和這樣的條件支持文件的鏈接,但我不知道我會怎麼做。也許有一個很好的方法?
我相信它們是'__attribute__((構造函數))'(和'析構函數')函數所需要的。 (和我從一個C++高手很遠,但我被告知,以符合標準的,全局構造也出現之前'發生的main()'被調用。) – caf 2010-11-11 07:29:34
@caf:我的印象是,下C++標準規定,構造函數的調用在程序調用並在第一時間之間的未指定的時間的對象被使用(當然在未指定的順序,除了其中一個對象引用另一個,從而調用「它的使用第一次」的情況下) 。你有沒有提到相反的? – 2010-11-11 07:40:13
可能會是一個「雞蛋吸教」,但你有沒有試過用'gcc'編譯,而直接進入你的系統的連接(可能是'ld')爲實際的鏈接步驟,讓你有過聯繫更大的控制權? – 2010-11-11 07:49:47