美文网首页
如何编译和运行 C++ 程序?

如何编译和运行 C++ 程序?

作者: LoveSkye | 来源:发表于2019-10-21 21:50 被阅读0次

    1. C++程序的后缀

    C++ 源文件的后缀则有些混乱,不同的编译器支持不同的后缀,下表是一个简单的汇总:

    不同编译器下C++源文件的后缀
    总结:从表中看出,除去UNIX系统,使用.cpp作为后缀比较方便。

    2. gcc与g++指令

    GCC 是由 GUN 组织开发的,最初只支持 C 语言,是一个单纯的 C 语言编译器,后来 GNU 组织倾注了更多的精力,使得 GCC 越发强大,增加了对 C++、Objective-C、Fortran、Java 等其他语言的支持,此时的 GCC 就成了一个编译器套件(套装),是所有编译器的总称。
    在这个过程中,gcc 命令也做了相应地调整,它不再仅仅支持 C 语言,而是默认支持 C 语言,增加参数后也可以支持其他的语言。也就是说,gcc 是一个通用命令,它会根据不同的参数调用不同的编译器或链接器。

    但是让用户指定参数是一种不明智的行为,不但增加了学习成本,还使得操作更加复杂,所以后来 GCC 又针对不同的语言推出了不同的命令,例如 g++ 命令用来编译 C++,gcj 命令用来编译 Java,gccgo 命令用来编译 Go 语言

    总结:当不指定参数的时候,gcc默认c语言源文件的编译指令,对于不同的语言,使用不同的编译指令。
    在以后使用 Linux GCC 时,推荐使用 g++ 命令来编译 C++ 程序,这样更加简洁和规范。

    3. g++编译过程

    经过链接产生可执行文件

    g++ test.cpp
    
    ./a.out 
    

    以上两行代码其实可以划分为以下几个阶段:

    1. 预处理阶段(生成.i文件):
    g++ -E test.cpp  -o test.i
    

    这一步主要做了宏的替换和注释的消除
    2.将预处理后的文件转换为汇编语言(生成.s文件)

    g++ -S test.i  -o test.s
    

    3.将汇编语言转为目标代码(机器码):

    g++ -c test.s  -o test.o
    

    4.链接目标代码,生成可执行程序,这里有两种写法:
    动态编译:

    g++ test.o  -o test
    

    静态编译:

     g++ test.o -static  -o test 
    

    若执行g++ test.o -o不指定可执行文件名称,则生成a.out
    两种编译方式都可生成可执行文件:
    前者文件只包含文件名,运行时再链接相关函数,
    后者编译时便链接相关函数,前者体积小,运行时没后者快,后者体积大。

    相关文章

      网友评论

          本文标题:如何编译和运行 C++ 程序?

          本文链接:https://www.haomeiwen.com/subject/ybyxvctx.html