gcc与g++编译器介绍
本文主要介绍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++编译器介绍相关推荐
- msys2安装gcc、g++编译器
更换清华源 https://mirrors.tuna.tsinghua.edu.cn/help/msys2/ 1.pacman基本命令 pacman -Sy 更新软件包数据 pacman -Syu 更 ...
- gcc与g++编译器
首先在Linux(RHEL7.0)上安装gcc:yum install gcc gcc-c++ -y 其中gcc-c++是为了能够编译c++源代码,即g++. gcc为Linux C/C++下重要 ...
- linux下如何升级gcc和g++编译器
1. sudo yum -y intall epel-release 2. sudo yum install centos-release-scl-rh centos-release-scl 3. s ...
- gcc编译器与g++编译器的区别
gcc与g++编译器的程序文件分别为:/usr/bin/g++和/usr/bin/gcc. gcc 和 GCC 是两个不同的东西,GCC:GNU Compiler Collection(GUN 编译器 ...
- 【Linux】gcc和g++的区别
gcc和g++编译器的区别 gcc 现在是 gnu 提供的一些编译器工具的集合(Gnu Compiler Collection),以前是gnu 组织提供的 c 编译器(Gnu C Compiler). ...
- g++ linux 编译开栈_linux gcc和g++版本的修改
##编译的时候容易遇到:unsupported GNU version! gcc versions later than 6 are not supported这样的错误.所以我们要更改系统的gcc和 ...
- gcc g++ 参数介绍
C和C++ 编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).源 ...
- 更改Ubuntu gcc、g++默认编译器版本
更改Ubuntu gcc.g++默认编译器版本 转一篇文章: 升级Ubuntu到11.10,但在编译Android的时候出错了.这个Android在升级系统之前编译是没有错误的,对比发现升级到Ubun ...
- gcc/g++编译器的优化
gcc/g++编译器的优化 gcc提供了从O0-O3以及Os这几种不同的优化级别供大家选择 O0是编译器默认的设置 (1).-O1:它主要对代码的分支,常量以及表达式等进行优化 (2).-O2:尝试更 ...
- 嵌入式Linux系统编程学习之五gcc/g++编译器
文章目录 前言 一.gcc/g++编译过程 二.静态库和动态库 三.gcc警告和优化选项 1.gcc警告 2.gcc优化选项 前言 对于.c格式的C文件,可以采用gcc或g++编译,对于.cc.. ...
最新文章
- 报名 | 2019年社会计算机国际会议
- netstat -ano 查看机器端口占用情况
- leetcode算法题--可获得的最大点数
- c++自定义的数据库类
- hdu1166敌兵布阵 树状数组裸题
- windows环境下 curl 安装和使用
- linux注意的一些地方
- java语言 编译原理_【Java学习】深入分析Java的编译原理
- strtus2改成springboot_ssh框架使用springBoot升级迁移替换Struts2
- Java LinkedHashMap forEach()方法与示例
- 实战Zabbix-Server数据库MySQL的libdata1文件过大
- 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思,借鉴 然后自己借鉴出来
- 2016计算机二级考试c语言真题及答案,计算机二级考试c语言真题_2017计算机二级考试C语言复习题及答案...
- hutool-all 导入Excel 文件 学习笔记
- python 区块链_python与区块链
- 【windows10】 CH340/CH341 USB转串口驱动安装
- java 数字转换人民币大写
- 4G基站软件产品测试,4G TD-LTE测试解决方案全方位解读 - 全文
- callmode php_phper必须了解的php常识
- 标准Modbus通讯协议格式