每个喜欢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++
|