簡體   English   中英

gcc為不同的文件名生成不同的結果

[英]gcc generates different results for different filenames

為什么gcc為不同的源文件名生成不同的可執行文件?

測試我有這個名為test.c和test2.c的c-programm:

int main(){}

“gcc test.c -o test”和“gcc test2.c -o test2”生成不同的輸出文件。 使用十六進制編輯器,我可以看到它的源文件名仍然隱藏在其中。 剝離文件仍然會導致不同的結果(源文件名已消失)。 為什么gcc以這種方式運作? 我也測試了clang和tcc。 Clang表現得像gcc那樣,而tcc為不同的文件名生成相同的結果?

gcc版本4.9.1(Debian 4.9.1-1)

鏗鏘3.4.2-4

tcc版本0.9.25

在兩個二進制文件的hexdump上執行diff在偏移量0x0280附近顯示一個小的差異。 查看各節(通過objdump -x ),差異出現在.note.gnu.build-id部分。 我的猜測是,這提供了某種UUID,用於區分其他類似代碼的不同構建,以及驗證調試信息( 此處引用,大約三分之一)。

gcc的-o選項是指定輸出文件。 如果你給他不同的-o目標,它將生成不同的文件。

gcc test.c -o foo

你有一個foo可執行文件。

另請注意,如果沒有-o選項,gcc將輸出a.out可執行文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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