我在Linux的gcc手册(
man gcc
)中查找-c
选项(gcc -c infile
),该选项说明如下:
此外,在检查ELF文件和目标文件(用-c:编译或汇编源文件,但不进行链接。不执行链接阶段。每个源文件的最终输出形式是一个目标文件。
默认情况下,源文件的目标文件名是通过将后缀.c、.i、.s等替换为.o而生成的。
file
命令)时,输出结果相同: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
因此,它们都具有相同的描述。
- 两个文件之间的实际区别是什么?如果我有多个源文件呢?
- 正确的文件是哪一个,如何生成它?
- 我需要对象文件吗,还是它们只是中间文件?
- 如果我使用
-c
选项和一些标志(-Wall -g -std=c99 -Os
)编译一些源文件并从中获取对象文件,那么这些标志是否在生成ELF文件时保留(如果我在对象文件上使用了它们,那么在生成ELF文件时是否可以跳过这些标志)?
file
输出中可见:.o
文件是ELF 32-bit LSB 可重定位
的。 - rodrigo