g++?
?
一般分为这几步:
1. 预处理,生成.i文件
2. 编译,生成.s文件(汇编文件)
3. 汇编,将汇编文件转化成.o文件(目标文件)
4. 连接目标代码,生成可执行文件
?
-c ?激活预处理,编译,汇编,最后生成obj文件
-S 激活预处理,编译,最后生成.s汇编文件
-E 激活预处理,不生成文件,需要定位到一个输出文件里
?
-o 为结果文件命名
?
-O0
-O1
-O2
-O4
编译器的四个优化级别,-O0为没有优化,-O1为默认值,-O3为优化最高级别。
对于valgrind来说,-O0是最喜欢的,只是速度较慢。-O1相对-O0来说错误信息可能不够完整,但一般来说表现良好。-O2就不推荐了。
?
-Wall 使g++能够产生尽可能过的警告消息
?
对于多个文件:
g++ foo1.cc foo2.cc -o foo
相当于:
g++ foo1.cc -o foo1.o
g++ foo2.cc -o foo2.o
g++ foo1.o foo2.o -o foo
?
?
调用函数库:函数库是一些头文件(.h文件)和库文件(.a和.so文件)的集合
-I 向g++头文件搜索路径中添加新的路径
-L 向g++库文件搜索路径中添加新的路径
-l 指示g++链接的函数库,库文件命名以lib开头,故这里可以省略lib
?
库文件分为:静态链接库(.a结尾),动态链接库(.so结尾)
g++优先使用动态链接库,在动态链接库不存在的情况下使用静态链接库
可以在编译时增加-static强制使用静态链接库
?
-Dmacro 相当于C语言中的#define macro
-Dmacro=defn 相当于C语言中的#define macro=defn
-Umacro 相当于C语言中的#undef macro
?