2014-07-05 30 views
1

在我的ARM項目,我用以下命令構建操作系統更少的應用程序二進制:關於-ffunction截面-fdata截面和--gc截面選項

arm-linux-gcc -Os -ffunction-sections -fdata-sections -o boot.o boot.S 
arm-linux-gcc -Os -ffunction-sections -fdata-sections -o main.o main.c 
arm-linux-ld -T link.lds --gc-sections -o target.bin boot.o main.o 

這些作品的罰款。因爲如果我刪除「-ffunction-sections」,「-fdata-sections」和「--gc-sections」選項,target.bin文件大小將增加近兩倍..

但是在x86平臺上,方法,我發現: 如果我不使用這些gcc和ld選項,輸出是正常的,但如果我使用這些選項作爲arm平臺,輸出文件將是0字節。

回答

2

-Os -ffunction-sections -fdata-sections--gc-sections應該在x86系統上工作。你確定你的程序和鏈接器腳本適合x86嗎?由於您的程序僅適用於裸機ARM,因此它可能沒有用於x86操作系統的入口點,並且如果沒有入口點,則所有內容都會被--gc-sections選項剔除。

順便說一句,你的「問題」實際上沒有問題。

+0

謝謝。 0字節的輸出就是問題。我重新定義了入口點,它起作用。 –

+0

但我在x86 gcc中發現了另一個問題。如果我使用-Os選項,則生成的二進制文件運行異常。如果我不添加-Os選項,則輸出二進制大小較大,但運行正常。你遇到過這樣的問題嗎?有空的時候我會調試一下。 –

+0

我確實遇到過這樣的問題,它並不總是相同的原因,所以我在這裏幫不了你,但它通常與C未定義的行爲(C中有很多未定義的行爲)有關,這可能會隨着優化級別而改變。 – Jacen