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

2019-10-21  本文已影响0人  LoveSkye

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
两种编译方式都可生成可执行文件:
前者文件只包含文件名,运行时再链接相关函数,
后者编译时便链接相关函数,前者体积小,运行时没后者快,后者体积大。

上一篇下一篇

猜你喜欢

热点阅读