gcc/g++编译器的使用

1.  gcc编译器简介

     gcc原名是GNU C Complier,支持C语言的编译链接,也支持C++、object-c等语言的编译链接。

     根据《深入理解计算机系统(第三版)》第1.2小节内容,gcc将一个源程序文件转换为最终的可执行程序需要经过预处理、编译、汇编、链接四个阶段。

gcc/g++编译器的使用_第1张图片

2. 常见的编译选项

    cc和gcc 命令是一样的,只是gcc命令的简化。另外,对于C++程序则使用g++命令来执行

     gcc -E :进行预处理,默认将处理结果输出到标准输出设备上,如电脑屏幕。可以结合-o参数,将结果输出到.i文件中。

     gcc -s :进行-编译处理,生成.s为后缀的汇编语言文件;

     gcc -c :进行汇编处理,生成.o文件;

     gcc   :生成可执行文件,默认生成的可执行文件名为a.out。可以结合-o生成指定的名称;

     gcc  -v :  可以查看gcc的版本号;

     gcc -wall:尽可能给出更多地警告;

3. 示例

    但在实际中,我们通常不会一步一步的执行gcc -E、gcc -s 、gcc-c ...,而是直接"gcc hello.c"生成可执行文件,默认生成的可执行文件名为a.out。下面示例是C++程序hello.cc,使用"g++ hello.cc"一步生成可执行文件。

   gcc/g++编译器的使用_第2张图片

  也可以结合-o参数生成自己想要指定的名字:

gcc/g++编译器的使用_第3张图片

另外,C程序可以使用gcc命令编译,但上面示例是C++程序,所以必须使用g++命令来编译生成可执行程序,否则会出现下列错误提示:

/tmp/cc03zZiq.o: In function `main':
hello.cc:(.text+0xa): undefined reference to `std::cout'
hello.cc:(.text+0xf): undefined reference to `std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*)'
hello.cc:(.text+0x14): undefined reference to `std::basic_ostream >& std::endl >(std::basic_ostream >&)'
hello.cc:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/cc03zZiq.o: In function `__static_initialization_and_destruction_0(int, int)':
hello.cc:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()'
hello.cc:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

4. C++11标准

C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言(也就是C++98标准)第一次大修订,对C++语言进行了改进和扩充。随后各编译器厂商都各自实现或部分实现了C++中的特性。

C++11标准是2011年8月份出的,Visual Studio2010已经支持一部分C++11标准了,VS2012则比VS2010支持的多一些,而VS2013则更加全面,甚至还支持一部分C++14标准。所以我们个人学习时,可选择Visual Studio 2013以上的版本。可参考微软官网:https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/hh567368(v=vs.120)

gcc/g++编译器的使用_第4张图片

而在linux系统中,则最好选择gcc4.8以上的版本。使用gcc -v可以查看linux系统中gcc的版本。对于包含C++11标准特征的代码,应该使用-std参数指定标准进行编译。如下面代码,包含了C++11标准中{}列表初始化和lambda表达式,对此在编译时,应该使用"g++ -std=c++11 hello.cc"这样的语句

gcc/g++编译器的使用_第5张图片

gcc/g++编译器的使用_第6张图片

 

你可能感兴趣的:(Linux)