gcc/g++编译器的使用

14 篇文章 0 订阅
9 篇文章 0 订阅

1.  gcc编译器简介

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

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

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"一步生成可执行文件。

   

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

另外,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<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
hello.cc:(.text+0x14): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
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以上的版本。可参考微软官网:Support For C++11 Features (Modern C++) | Microsoft Learn

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值