为了能更好的说明意思, 下面的源文件使用define_main.cpp为例…
g++ define_main.cpp该过程包含了
- 编译: 是把文本形式源代码翻译为机器语言形式的目标文件的过程。(源代码 --> 目标文件(.o))
- 链接: 是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成可执行代码的过程。(目标文件 --> 可执行文件(.exe))
- 1~3是属于编译过程
- 4是属于链接过程
1. 预处理(无关代码的清除):
头文件的引用, 宏的替换, 注释的消除
生成一个.i文件(输出预处理后的文件,linux下以.i为后缀名)
g++ -E define_main.cpp > define_main.i
2. 将预处理后的文件转换成汇编语言, 生成.s文件
g++ -S define_main.cpp > define_main.s
3. 由汇编文件转换为目标代码, 生成.o文件
g++ -c define_main.cpp > define_main.o
除非你是做编译器和连接器调试开发的,否则打开这种.o没有任何意义。二进制机器码一般人也读不了…
4. 连接目标代码,生成可执行程序
g++ define_main.o -L 库文件
功能:将.o文件与所需的库文件链接整合形成.exe文件,这就是可执行文件。-L 表示链接,这里我后面写的是绝对路径,相对各人电脑不同