gcc & g++
现在是gnu
中最主要和最流行的c & c++
编译器 。
g++
是c++
的命令,以.cpp
为主,对于c
语言后缀名一般为.c
。
这时候命令换做gcc
即可。
本质上都是gnu
编译器集合中的俩个部分
其实编译器是根据gcc
还是g++
来确定是按照C
标准还是C++
标准编译链接。
下面以
Test.cpp
为例:
命令: `g++ Test.cpp`
功能:生成默认为a.exe
的文件,这个过程包含了编译和链接。
再说下-o
命令,-o
命令表示输出的意思,gcc/g++
命令是非常灵活的,你不指定输出的文件名的时候默认生成的是.exe
文件。
要输出
Test.exe
的话可以用:
g++ -o Test.exe Test.cpp
-o
命令是输出的意思,这样就输出了
Test.exe
gcc/g++
在执行编译工作的时候,总共需要以下几步:
1.预处理,生成.i
的文件[预处理器cpp
]
命令:g++ -E Test.cpp > Test.i
功能:输出预处理后的文件,linux
下以.i
为后缀名。
只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 。
这一步主要做了这些事情:宏的替换,还有注释的消除,还有找到相关的库文件。
用编辑器打开Test.i
会发现有很多很多代码,你只需要看最后部分就会发现,预处理做了宏的替换,还有注释的消除,可以理解为无关代码的清除。
2.将预处理后的文件转换成汇编语言,生成文件.s
[编译器egcs
]
命令:g++ -S Test.cpp
功能:会生成Test.s
文件,.s
文件表示是汇编文件,用编辑器打开就都是汇编指令。
3.由汇编变为目标代码(机器代码)生成.o
的文件[汇编器as
]
命令:g++ -c Test.cpp
功能:.o
是GCC
生成的目标文件,除非你是做编译器和连接器调试开发的,否则打开这种.o
没有任何意义。
二进制机器码
4.连接目标代码,生成可执行程序[链接器ld
]
命令:g++ Test.o -L F:\vs2008\VC\include\iostream
功能:将.o
文件与所需的库文件链接整合形成.exe
或.exec
可执行文件。
-L
表示链接,这里我后面写的是绝对路径,相对各人电脑不同
在上面各个步骤中你可以用
-o
命令输出你自己想要的各种名字。比如最后一个命令,用下面的输出
Test.exe
g++ Test.o -o Test -L F:\vs2008\VC\include\iostream