Gcc 关于-ffunction节-fdata节和--gc节选项

Gcc 关于-ffunction节-fdata节和--gc节选项,gcc,x86,arm,Gcc,X86,Arm,在我的ARM项目中,我使用以下方法构建无操作系统的应用程序二进制文件: 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 这些很好

在我的ARM项目中,我使用以下方法构建无操作系统的应用程序二进制文件:

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字节。

-Os-ffunction sections-fdata sections
--gc sections
应该可以在x86系统上工作。您确定您的程序和链接器脚本适合x86吗?由于您的程序是针对裸机ARM的,因此它可能没有x86操作系统的入口点,如果没有入口点,则所有内容都会被
--gc sections
选项弄得一团糟


顺便说一句,你的“问题”实际上没有问题。

谢谢。0字节的输出只是个问题。我重新定义了入口点,它工作了。但是我在x86GCC中发现了另一个问题。如果使用-Os选项,生成的二进制文件将异常运行。如果我不添加-Os选项,输出二进制文件的大小会更大,但它会正常运行。你遇到过这样的问题吗?我会在有时间的时候调试这个。我确实遇到过这样的问题,原因并不总是一样的,所以我不能在这里帮助你,但它通常与C未定义的行为有关(C中有很多未定义的行为…),这可能会随着优化级别的变化而变化。