先探索最简单的hello world程序的编译流程。
#include <iostream>
using namespace std::cout;
void main(){
cout<<"Hello,World!\n";
}
linux下的自动编译:
-o 用于产生名为hello的可执行文件,如果没有,则默认产生名为a.out的可执行文件。
clang++ hello_world.cpp -o hello
./hello
linux下的手动编译:
下述命令clang++在编译的过程中,保存所有编译过程中产生的文件。
clang++ -save-temps hello_world.cpp -o hello
一共会产生四个文件,分别是:hello_world.ii hello_world.s hello_world.o hello.cpp
上述四个文件分别对应了编译的四个不同阶段。
下面开始手动编译进行比较:
1.预编译阶段:将iostream文件替换为c++代码。如果使用clang,则该文件的存储位置和libc++的安装位置相同。该操作使得定义在iostream中的std::cout可以被识别。
clang++ -E hello_world.cpp -o preprocessed.ii
cat preprocessed.ii
cat hello_world.ii
diff hello_world.ii preproce