本文主要介绍gcc和g++编译器的区别与联系,以及两种编译器的常用选项。

1. gcc与g++的区别与联系

  • gcc最初表示GNU C语言编译器“GNU C Compiler”,后来,随着这个项目里集成的编译器越来越多,最后,GCC就代表GNU编译器集合“the GNU Compiler Collection”了。此时:gcc和g++就都变成了GCC(the GNU Compiler Collection)集合中的编译驱动器(通常在不严谨的情况下,我们都直接以编译器称呼)了。
  • 对于后缀为.c/.c++的文件,gcc分别将其作为c文件/c++文件进行编译;
  • 对于后缀为.c/.c++的文件,g++均将其视为c++文件进行编译;
  • 在连接目标文件过程中,gcc默认不会去自动连接c++库(可通过设置“-lstdc++”参数,去连接c++库);而g++默认去连接c++库;
  • 尽管gcc和g++会做许多相似的事情,但是g++是专门针对c++语言设计的命令,g++对于c++的自动适应性更好,所以在编译c++文件的过程中,最好是选择g++编译器;
  • g++与gcc的选项几乎一样。
  • 通常来说,对于c文件,使用gcc进行编译;对于c++文件,使用g++进行编译。

2. gcc与g++的常用选项

1)-l

  • 用法:-llibrary
  • 作用:在连接过程中,搜索名为library的库
  • 说明:在使用-l选项时,后面的库名只写lib与*.so之间的部分。例如共享库的名字为libfileA.so,那么在使用-l连接时,需要写成-lfileA。

2)-L

  • 用法:-Ldir
  • 作用:将dir目录添加到-l选项的搜索列表中
  • 说明:如果多次使用-L选项,-L选项指定的目录会按顺序被搜索

3)-I

  • 用法:-Idir
  • 作用:将dir目录添加到头文件搜索的目录列表中
  • 说明:-I选项指定目录的搜索优先级高于标准系统的include目录。gcc默认搜索的头文件路径为 /usr/include。

4)-shared

  • 用法:-shared
  • 作用:生成一个共享目标程序,该程序可与其他目标程序进行连接,生成可执行程序。
  • 说明:不是所有的系统都支持此选项。可预测的是,当使用此连接器选项时,用户也必须指定用于编译的相同选项集,例如-fpic、-fPIC或者模型子选项。

5)-fPIC

  • 用法:-fPIC
  • 作用:如果目标机器支持,为动态链接发布恰当的、位置无关代码(position-independent code,即PIC),来避免GOT(Global Offset Table)的大小限制。
  • 说明:PIC需要特殊支持,所以只在某些机器上生效。当指定了此选项后,"__pic__" and "__PIC__"宏被定义为2。Linux下编译生成共享库时,通常都需要加上-fPIC选项,否则在连接时会有错误提示。

6)-g

  • 用法:-g
  • 作用:Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this debugging information.
  • 说明:使用 -g 参数,会将源代码信息编译到可执行文件中,便于后续使用GDB进行代码调试。

3. 常见用法

编译生成共享库,示例用法如下:

g++ -shared -fPIC -o fileA.so fileA.cpp

gcc与g++编译器介绍相关推荐

  1. msys2安装gcc、g++编译器

    更换清华源 https://mirrors.tuna.tsinghua.edu.cn/help/msys2/ 1.pacman基本命令 pacman -Sy 更新软件包数据 pacman -Syu 更 ...

  2. gcc与g++编译器

    首先在Linux(RHEL7.0)上安装gcc:yum install gcc gcc-c++ -y   其中gcc-c++是为了能够编译c++源代码,即g++. gcc为Linux C/C++下重要 ...

  3. linux下如何升级gcc和g++编译器

    1. sudo yum -y intall epel-release 2. sudo yum install centos-release-scl-rh centos-release-scl 3. s ...

  4. gcc编译器与g++编译器的区别

    gcc与g++编译器的程序文件分别为:/usr/bin/g++和/usr/bin/gcc. gcc 和 GCC 是两个不同的东西,GCC:GNU Compiler Collection(GUN 编译器 ...

  5. 【Linux】gcc和g++的区别

    gcc和g++编译器的区别 gcc 现在是 gnu 提供的一些编译器工具的集合(Gnu Compiler Collection),以前是gnu 组织提供的 c 编译器(Gnu C Compiler). ...

  6. g++ linux 编译开栈_linux gcc和g++版本的修改

    ##编译的时候容易遇到:unsupported GNU version! gcc versions later than 6 are not supported这样的错误.所以我们要更改系统的gcc和 ...

  7. gcc g++ 参数介绍

    C和C++ 编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).源 ...

  8. 更改Ubuntu gcc、g++默认编译器版本

    更改Ubuntu gcc.g++默认编译器版本 转一篇文章: 升级Ubuntu到11.10,但在编译Android的时候出错了.这个Android在升级系统之前编译是没有错误的,对比发现升级到Ubun ...

  9. gcc/g++编译器的优化

    gcc/g++编译器的优化 gcc提供了从O0-O3以及Os这几种不同的优化级别供大家选择 O0是编译器默认的设置 (1).-O1:它主要对代码的分支,常量以及表达式等进行优化 (2).-O2:尝试更 ...

  10. 嵌入式Linux系统编程学习之五gcc/g++编译器

    文章目录 前言 一.gcc/g++编译过程 二.静态库和动态库 三.gcc警告和优化选项 1.gcc警告 2.gcc优化选项 前言   对于.c格式的C文件,可以采用gcc或g++编译,对于.cc.. ...

最新文章

  1. 报名 | 2019年社会计算机国际会议
  2. netstat -ano 查看机器端口占用情况
  3. leetcode算法题--可获得的最大点数
  4. c++自定义的数据库类
  5. hdu1166敌兵布阵 树状数组裸题
  6. windows环境下 curl 安装和使用
  7. linux注意的一些地方
  8. java语言 编译原理_【Java学习】深入分析Java的编译原理
  9. strtus2改成springboot_ssh框架使用springBoot升级迁移替换Struts2
  10. Java LinkedHashMap forEach()方法与示例
  11. 实战Zabbix-Server数据库MySQL的libdata1文件过大
  12. 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思,借鉴 然后自己借鉴出来
  13. 2016计算机二级考试c语言真题及答案,计算机二级考试c语言真题_2017计算机二级考试C语言复习题及答案...
  14. hutool-all 导入Excel 文件 学习笔记
  15. python 区块链_python与区块链
  16. 【windows10】 CH340/CH341 USB转串口驱动安装
  17. java 数字转换人民币大写
  18. 4G基站软件产品测试,4G TD-LTE测试解决方案全方位解读 - 全文
  19. callmode php_phper必须了解的php常识
  20. 标准Modbus通讯协议格式

热门文章

  1. 如何优雅的show出你的代码?
  2. shellcode助手
  3. 深度剖析“GCC编译器编译过程”
  4. 数据库 MySQL 之 表操作、存储引擎
  5. 开源Docker管理工具kubernetes的简易安装和使用
  6. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
  7. java8: hashmap性能提升
  8. 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)
  9. Python3 写入文件
  10. 轻量级MVC框架(自行开发)