Linux编译器--gcc/g++的使用

1. gcc与g++

gcc与g++分别是c语言与c++代码的编译器,但同时g++也兼容c语言。

我们知道在Linux中,系统并不以文件后缀来区分文件类别。但对于gcc与g++等编译器而言却是需要的。Linux中c代码文件的后缀是.c,c++代码文件的后缀是.cpp(.cc)(.cxx)。

在Linux中,我们可以借助如下命令查询gcc/g++的版本

gcc --version

g++ --version

如果我们查询失败,显示系统中没有gcc/g++,那么我们可以借助yum工具来进行安装。

yum -y install gcc

yum -y install gcc-c++

这里要注意,gcc只能编译c语言代码,而g++同时兼容c/c++。-o选项可以指定生成可执行文件的名字。

实例:

 

2.程序的翻译过程 

一张图表示程序的翻译过程

 

在上图中,其他的都很好理解,那么链接是谁和谁链接呢?

链接是我们的程序同库之间链接的过程,ldd+可执行程序名,就可以查看程序依赖的库。

怎么做的?

在Linux系统中,分为两种库,动态库:.so  静态库:.a(动态链接,静态链接)

静态链接
特点:在生成可执行文件的时候(链接阶段),把所有需要的函数的二进制代码都包含到可执行文件中去。因此,链接器需要知道参与链接的目标文件需要哪些函数,同时也要知道每个目标文件都能提供什么函数,这样链接器才能知道是不是每个目标文件所需要的函数都能正确地链接。如果某个目标文件需要的函数在参与链接的目标文件中找不到的话,链接器就报错了。目标文件中有两个重要的接口来提供这些信息:一个是符号表,另外一个是重定位表。
优点:在程序发布的时候就不需要的依赖库,也就是不再需要带着库一块发布,程序可以独立执行。
缺点:程序体积会相对大一些。
如果静态库有更新的话,所有可执行文件都得重新链接才能用上新的静态库。
动态链接
特点: 在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库可执行代码,最终达到运行时连接的目的。
优点: 多个程序可以共享同一段代码,而不需要在磁盘上存储多个拷贝。
缺点: 由于是运行时加载,可能会影响程序的前期执行性能。

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/469955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux安装Redis且搭建主从、哨兵、集群以及使用(超详细)

一.Redis简介 1.NoSQL简介 ​ 目前市场主流数据存储都是使用关系型数据库。每次操作关系型数据库时都是I/O操作,I/O操作是主要影响程序执行性能原因之一,连接数据库关闭数据库都是消耗性能的过程。尽量减少对数据库的操作,能够明显的提升程…

Nodejs 第五十八章(大文件上传)

在现代网站中,越来越多的个性化图片,视频,去展示,因此我们的网站一般都会支持文件上传。 文件上传的方案 大文件上传:将大文件切分成较小的片段(通常称为分片或块),然后逐个上传这…

体育运动直播中的智能运动跟踪和动作识别系统 - 视频分析如何协助流媒体做出实时决策

AI-Powered Streaming Vision: Transforming Real-Time Decisions with Video Analytics 原著:弗朗西斯科冈萨雷斯|斯特朗(STRONG)公司首席ML科学家 翻译:数字化营销工兵 实时视频分析通过即时处理实时视频数据&…

【故障排查】10分钟解决Quartz重复调度的疑难杂症

我司使用Apache DolphinScheduler作为调度框架很久了,感兴趣的小伙伴可以看看这些干货文章: 因为之前监控到会出现重复的调度的问题,所以此文记录排查重复调度问题的全过程,希望对社区其他的小伙伴能够起到抛砖引玉的作用&#x…

1.中医学习-总论

目录 1.为什么要学中医 2.什么是中医 介绍 中医例子1: 中医例子2: 中医最高境界“大道至简” 中医讲究的是本质 中医核心:阴阳、表里、寒热、虚实 ​编辑医不叩门 3.阴阳 1.一天中的阴阳 2.一年中的阴阳 3.阴阳之间的关系 4.阴阳四季的变化 …

JetBrains学生包续期

Pycharm进入显示your license has expired 这个意思是你的许可过期了,重新输入最新的激活码就可以了。 1. 说明我的JetBrains学生包需要进行续期了。首先登录JetBrains官网打开个人主页,点击Renew my Education Pack 2. 然后填写一系列信息,…

户用光伏OA管理系统——光伏企业管理的新利器

随着全球对可再生能源的重视和推广,光伏行业得到了快速的发展,为人们提供了清洁、可再生能源。户用光伏作为光伏行业中应用最为广泛的发电系统,可以安装在居民住宅等地。越来越多的人们对户用光伏的发展给予支持,给光伏企业管理带…

PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包

近年来,电商行业的迅猛发展,越来越多的商户开始寻求搭建自己的在线商城。然而,传统的商城系统往往功能单一,无法满足商户个性化、多样化的需求。同时,搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…

OpenCV4.9.0在windows系统下的安装

返回:OpenCV系列文章目录(持续更新中......) 上一章:将 OpenCV 与 Eclipse 结合使用(插件 CDT) 下一章:未发表 警告: 本教程可以包含过时的信息. 此处的描述已在 Windows 7 SP1 上…

FMQL45 XADC

通过PL自带的XADC可以读写温度,电压等,但是总是读的不对。开始查找FM_QL_bsp里面少了一个部分就是pl!添加,在ewp已经修改了,但是文件不存在,现在给补上了,有点奇怪,有的项目会自动生…

ConKI: Contrastive Knowledge Injection for Multimodal Sentiment Analysis

文章目录 ConKI:用于多模态情感分析的对比知识注入文章信息研究目的研究内容研究方法1.总体结构2.Encoding with Knowledge Injection2.1 Pan-knowledge representations2.2 Knowledge-specific representations 3.Hierarchical Contrastive Learning4.损失函数5.训…

发布镜像到阿里云仓库

发布上一篇Dockerfile实战-自定义的centos镜像。 1、登录阿里云 2、找到容器镜像服务 3、创建命令空间 4、创建镜像仓库 5、点击进入这个镜像仓库,可以看到所有的信息 6、根据操作指南测试推送发布 6.1登录阿里云 [rootzhoujunru home]# docker login --usernam…

【问题记录】自定义Prometheus exporter收集数据,Prometheus显示收集到数据,grafana未显示数据出来

问题背景: 使用golang编写Prometheus exporter,获取指定API Url返回值中的data值,把它做为自定义指标。 1、exporter 500ms自动更新一次data值 2、Prometheus的Graph界面输入自定义指标可以查询到值的变化 3、自定义指标最小时间是ms级别&…

es 集群安全认证

参考文档:Configure security for the Elastic Stack | Elasticsearch Guide [7.17] | Elastic ES敏感信息泄露的原因 Elasticsearch在默认安装后,不提供任何形式的安全防护不合理的配置导致公网可以访问ES集群。比如在elasticsearch.yml文件中,server…

数据在内存中的的存储

1.数据类型介绍 内置类型 char , short , int , long , float , double , long long (C99) long 类型的大小是 4 / 8 个字节,元素C语言规定 sizeof(long)> sizeof(int)就行。在32位平台上,long为4个字…

完整指南:如何使用 Stable Diffusion API

Stable Diffusion 是一个先进的深度学习模型,用于创造和修改图像。这个模型能够基于文本描述来生成图像,让机器理解和实现用户的创意。使用这项技术的关键在于掌握其 API,通过编程来操控图像生成的过程。 在探索 Stable Diffusion API 的世界…

循环链表的用法

7.设 数 组 data[m] 作 为 循 环 队 列 SQ 的 存 储 空 间 ,front 为 队 头 指 针 ,rear 为 队 尾 指 针 ,则 执 行 出 队 操 作 后 其 头 指 针 front 值 为 ( ) A.frontfront1 B.front(front1…

上位机图像处理和嵌入式模块部署(qmacvisual自己编写算法插件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,qmacvisual本身支持52个控件,但是指望这52个控件可以cover所有的应用场景,这也不太现实。另外&am…

【DBC专题】-11-使用Cantools将CAN/CANFD DBC自动生成C语言代码

目录 1 安装Python和Cantools 1.1 查看Python已安装的Package包 1.2 在Python中安装Cantools插件包 1.3 获取更多Cantools工具的更新动态 2 经典CAN/CANFD DBC自动生成C语言代码 2.1 批处理文件CAN_DBC_To_C.bat内容说明 2.2 经典CAN/CANFD DBC文件要求 2.3 如何使用生…

腾讯云k8s容器服务

1、新建一个集群 这个网址: 登录登录 - 腾讯云 2、选择第一个 3、名字随便起一个,然后基本默认就行 4、 组件配置直接跳过,信息确认,等待集群初始化,等10分钟左右(容器服务需要充点钱才行) 5…