每个喜欢C++程序员的必备知识储备
一、GNU编译
GCC的编译过程(4个过程5个文件)
编译工具链
gcc的编译选项
-E | 将源文件预处理为预处理后的源文件 |
-S | 将预处理后的源文件编译成汇编文件 |
-c | 将汇编文件汇编成二进制文件 |
-o | 将二进制文件通过链接形成可执行文件 |
-I(大i | 指定include包含文件的搜索路径 |
-g | 生成调试信息,该程序可以被调试器调试 |
-D | 在程序编译的时候指定宏(Debug/Relese版) |
-w | 不生成任何警告信息 |
-wall | 生成所有警告信息 |
-l(小L) | 在程序编译的时候指定使用的库 |
-L | 在程序编译的时候,搜索库的路径 |
-fPIC | 生成与位置无关的代码 |
-shared | 生成共享目标文件,通常用在建立共享库时 |
-std | 指定c方言,即c的版本 |
-On | 优化级别(0-3依次增高) |
gcc与g++的区别
1.gcc和g++都是GNU(组织)的一个编译器
2.后缀为.c的文件,gcc把它当作是c程序,g++当作是c++文件,c++的语法更加严格
3.后缀为.cpp的文件,两者都认为是c++程序
4.编译阶段,g++会调用gcc,对于c++代码,二者是等价的,但是因为gcc不会自动和c++程序使用库联接,所以通常用g++来完成链接,为了统一,编译/链接都使用g++
5.gcc不会定义_cplusplus宏(误解),实际上买这个宏只是标志着编译器将会把代码按c还是c++语法来解释,所以,如果后缀.c的编译器用gcc编译器,那么_cplusplus就是未定义
6.编译可以用gcc/g++,而链接可以用g++/gcc -lstdc++
7.gcc不能自动和c++程序使用的库连接,所以通常使用g++