目录
1 问题提出
2 gcc与g++的区别
2.1 预处理
2.2 编译
2.3 汇编
2.4 链接运行
3 总结
1 问题提出
linux初学,写了个例程,用gcc -o编译时出现以下问题:
后来经过查询网上的资料,发现只需要将命令改为g++即可,如图:
2 gcc与g++的区别
先来简单总结一下gcc和g++最主要的区别:
- 对于 *.c和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
- 对于 *.c和*.cpp文件,g++则统一当做cpp文件编译
- 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL
为了更加明确gcc和g++的不同,我们对源程序(.cpp)分别进行预处理、编译、汇编和链接,来看看在这三个过程中gcc和g++有什么区别。
2.1 预处理
预处理使用的参数为 -E,预处理操作如下:
可见,二者预处理都可以正常运行,并且预处理生成的结果都是相同的。
2.2 编译
编译的命令参数为-S,编译操作如下:
gcc编译:
g++编译:
可见,编译阶段使用gcc的话会引发一系列错误,而这些错误大部分是无法识别namespace,而使用g++的话则不会引发错误。这个原因也就说明了g++会在编译时自动与C++的库进行连接,而gcc则不会。
2.3 汇编
将编译通过的文件eg++.s用于汇编,汇编使用的命令参数为-c,汇编操作如下:
gcc汇编:
g++汇编:
由此可见,由于使用gcc无法自动连接C++库,因此汇编阶段也会引发一系列错误,而g++则会正常汇编。
2.4 链接运行
对上述生成的eg++.o分别使用gcc和g++来链接,链接时不需要命令参数,链接操作如下:
使用gcc链接:
使用g++链接:
可见,gcc在链接时仍然会报错,而g++则会正常链接,并且最终运行正确结果。
3 总结
综上所述,对于.cpp文件,使用gcc来编译运行是会引发无法找到库的错误,而使用g++来编译运行则没有错误。如果程序中没有使用到C++STL方面的库,那么使用gcc和g++都是可以的。如果必须使用gcc来编译并运行c++程序的话,那就需要在gcc命令中源文件后加上-lstdc++,如下所示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)