预编译
这个过程主要是处理源代码中以#开头的预编译指令,比如#include,#define等
#-o 选项指定生成的文件 g++ -E hello.cpp -o hello.i
编译
这个过程就是把预编译完的文件进行词法分析、语法分析、语义分析及优化后生成 相应的汇编代码
#直接编译上步生成文件或源文件都可 g++ -S hello.i -o hello.s g++ -S hello.cpp -o hello.s
汇编
这个过程就是把汇编代码转换成机器码
g++ -c hello.s -o hello.o g++ -c hello.cpp -o hello.o
链接
通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。
g++ 1.cpp 2.cpp -o hello.out g++ *.o -o hello.out g++ *.cpp -o hello.out静态库的创建和使用
#创建 ar rcs libxxx.a xxx.o xxx.o
#使用 #在代码中引入头文件 #编译,g++命令通过 -L 选项指定静态库的路径,通过 -l 选项指定静态库名字,选项和参数有无空格都可 g++ main.c -o project -L path -l name动态库的创建和使用
#创建 g++ -c -fpic xxx.cpp xxx.cpp g++ -shared xxx.o xxx.o -o libxxx.so
#使用动态库编译的可执行文件,在执行时必须让操作系统找到相关的动态库才可以 #解决方法一 暂时添加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib #echo $LD_LIBRARY_PATH 查看指令
#解决方法二 gedit .bashrc #最后添加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib #刷新环境变量 source .bashrc #或者 . .bashrc
#使用与静态相同 g++ main.c -o project -L path -l name静态库的优缺点 动态库的优缺点
以上图片来源:https://www.nowcoder.com



