我在 linux ( man gcc)上查看 gcc 手册中的-c选项 ( gcc -c infile),其中指出:
-c:编译或汇编源文件,但不链接。链接阶段根本没有完成。最终的输出是以每个源文件的目标文件的形式。
默认情况下,源文件的目标文件名是通过将后缀 .c、.i、.s 等替换为 .o 来生成的。
更重要的是,在检查 ELF 文件和目标文件(使用filecomand )时,输出是相同的:
file ./out/main.o: ELF 32-bit LSB relocatable, Atmel AVR 8-bit, version 1 (SYSV), not stripped
file ./out/main.elf: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped
Run Code Online (Sandbox Code Playgroud)
所以他们都有相同的描述。我的问题是:
-c选项和一些标志(-Wall -g -std=c99 -Os)编译一些源文件并从中获取目标文件,这些标志是否会在 ELF 文件生成中持续存在(如果我在目标文件上使用它们,我可以在生成 ELF 文件时跳过这些标志)?