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