zoukankan      html  css  js  c++  java
  • gcc与g++

    本文转载自  http://www.2cto.com/kf/201304/203022.html

    [cpp]
    #include<iostream>

    using namespace std;

    写完主体函数。接着编译 gcc test.cpp -o test1.out ,问题出现了   char.cpp:(.text+0x4d):对‘std::cout’未定义的引用  ,不对啊,引用的文件盒命名空间都对着啊。难道新安装的系统崩溃呢?不对呀,刚才还成功运行了几个程序了。

    百思不得其解,然后一直在程序中找问题,始终没用找到症结所在,然后返回终端,猛然发现,之前编译的命令不是这样的,这个世界上,不止有个gcc还有个g++。然后g++ test.cpp -o test1.out 果然,编译马上成功。

    这勾起了我的好奇,gcc是个什么家伙,可以看出gcc是一条编译相关的命令,不然不会提示std::cout相关的错误,但他为什么不能识别std::cout呢,它和g++什么关系?带着这些问题,我对gcc和g++有了一个初步的认识,下面我把学到的总结如下:

        GCC(GNU Compiler Collection,GNU编译器集合),是一套由 GNU 开发的编程语言编译器,被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。原本只能处理 C语言,GCC 很快地扩展,变得可处理 C++,之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。

         g++是 linux下c++的编译器,在执行编译工作的时候,总共需要4步

             1.预处理,生成.i的文件
             2.将预处理后的文件不转换成汇编语言,生成文件.s
             3.有汇编变为目标代码(机器代码)生成.o的文件

        4.连接目标代码,生成可执行程序

           但从上面的过程,还是不能解决我们的疑惑,为什么会出现文章开始提到的编译错误 呢?原来gcc命令不能自动和C++程序使用的库联接。

    基于此,通常用g++来完成链接,为了统一起见,编译/链接统统用g++。

  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/tshua/p/5455390.html
Copyright © 2011-2022 走看看