ubuntu 下运行程序报错 对‘std::cout’未定义的引用:gcc与g++的区别

2023-05-16

目录

1 问题提出

2 gcc与g++的区别

2.1 预处理

2.2 编译

2.3 汇编

2.4 链接运行

3 总结


1 问题提出

linux初学,写了个例程,用gcc -o编译时出现以下问题:

后来经过查询网上的资料,发现只需要将命令改为g++即可,如图:


2 gcc与g++的区别

      先来简单总结一下gcc和g++最主要的区别:

  1. 对于 *.c和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
  2. 对于 *.c和*.cpp文件,g++则统一当做cpp文件编译
  3. 使用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(使用前将#替换为@)

ubuntu 下运行程序报错 对‘std::cout’未定义的引用:gcc与g++的区别 的相关文章

随机推荐