Linux中的gcc\g++使用

文章目录

    • gcc\g++的使用
      • 预处理
      • 编译
      • 汇编
      • 链接
      • 函数库
      • gcc选项

gcc\g++的使用

这里我们需要知道gcc和g++实际上是对应的c语言和c++编译器,而其他的Java(半解释型),PHP,Python等语言实际上是解释型语言,因此我们经常能听到c语言是偏向底层的语言

我们这里就以c语言为例,进行基础的讲解

我们知道计算机只能处理二进制代码,而在计算机发展的过程中,将二进制代码是用类似打孔纸带的东西承载的,再之后发展就是由汇编语言,将众多常用的二进制代码用助记符来表示,之后再由汇编语言发展而来的各类底层语言,也就是c语言

那我们把上面的过程反过来,就是电脑能够理解我们所写代码含义的过程了,也就称之为编译

在编译的过程中实际上分为四个阶段

那我们能否将编译的过程分段查看呢,其实在Linux中是可以做到的,只需要用一些指令即可

预处理

在这个阶段中,主要做一些准备工作,例如头文件展开,删除注释,条件编译,宏替换,这些工作都是在预处理阶段完成的,例如

我们首先使用vim创建一个c语言文件

vim test.c
#include<stdio.h>
int main()
{int i = 0;int sum = 0;for(; i <= 10; i++){sum += i;}printf("%d\n", sum);return 0;
}

我们使用gcc进行编译就可以直接产生一个可执行文件,这里我们可以用选项使他只进行预处理阶段的内容

gcc -E test.c -o test.i

这里的-E选项代表只进行预处理阶段的处理,-o表示生成文件的名称,我们一般把后缀名命名为i

可以使用vim可以看到里面的内容

屏幕截图 2023-12-28 192452.png

这里我们可以看到内容还是很多的,直接生成了八百多行的内容,因为他把stdio的内容全都转移到这个文件中了

但是我们还是可以看懂其中的内容的,说明他还是处于c语言阶段,并没有到汇编的内容

编译

实际上这一阶段就会将程序翻译成汇编语言,我们同样可以使用选项来查看内容

例如

gcc -S test.i -o test.s

屏幕截图 2023-12-28 192948.png

这里的代码对于没有学过汇编语言的人来说已经读不懂了,只能大概看懂里面的一些单词

汇编

这一过程就是将汇编转成可重定位的二进制文件,目前就只需要知道他是不可执行的即可

gcc -c test.s -o test.o

屏幕截图 2023-12-28 193400.png

链接

链接实际上就是字面意思,但是链接的是什么东西呢,实际上是对于函数库链接

我们在学习c语言的阶段了解过,需要包含stdio.h的头文件才可以进行一些格式化输入输出函数的使用,他其实就是函数库

函数库

在Linux中,有一个库文件叫做libc.so.6,在没有指定时,gcc会到默认路径下进行查找,再对其进行链接,这样就可以准确的调用到对应的函数了

对于这样的文件,libc.so.6,lib是前缀,后面的so之类的都是后缀,所以我们可以知道这个库其实是由c语言编写出来的

函数库一般分为两种,动态库和静态库

静态库是指编译链接时,将库文件的代码全部加入到可执行文件中,因此生成的文件也比较大,在运行时也不怎么需要库文件了,后缀名一般为a

动态库就是链接的主体了,这样做可以节省系统的开销,后缀名是so,在编译的过程中,gcc默认使用动态库,这样链接完成之后就会形成可执行文件了

gcc选项

选项说明
-E只预处理
-S只编译到汇编
-c编译到目标代码
-o生成可执行文件
-static采用静态链接
-g生成调试信息,GNU调试器可以利用该信息
-O0/ 无优化
-O1/ 缺省值
-O2/
-O3编译器优化的四个级别
-w不生成任何警告
-Wall生成所有警告信息
-shared尽可能使用动态库

感谢各位的支持,如果你发现文章中有任何不严谨或者需要补充的部分,欢迎在评论区指出

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

w4操作系统之windows上创建隐藏用户

隐藏用户–在windows上创建隐藏用户 1.首先查看现有哪些用户。&#xff08;通过net user 命令&#xff09; 2.然后创建隐藏用户&#xff08;net user client$ 123 /add&#xff09; 此时出现报错信息。原因是登录用户没权限。需要用管理员的权限 3.用管理员身份运行cmd&am…

联营商自述被坑惨,加盟库迪没有未来?

撰稿 | 多客 来源 | 贝多财经 近日&#xff0c;库迪联营商在社交平台不约而同发出了致库迪咖啡管理层的公开信&#xff0c;两封公开信可谓字字珠玑&#xff0c;没有一句废话&#xff0c;揭开了库迪咖啡在细节、运营、扩张、培训等方方面面的“背后真相”。 两封公开信 折射库…

无法连接虚拟机设备 ide1:0,因为主机上没有相应的设备。您要每次在开启此虚拟机时都尝试连接此虚拟设备吗?

Vmware报错&#xff1a; 报错原因&#xff1a; ide1:0一般是虚拟机的光驱&#xff0c;配置选项是“使用物理驱动器”&#xff0c;而宿主机可能没有安装光驱&#xff0c;故无法从驱动器上寻找 .ISO 系统文件。 解决方法: 右键点击对应的虚拟机&#xff0c;再点击“设置”按钮。…

windows和Linux如何做强制域名解析

首先我们了解两个问题&#xff1a; 一、域名解析是什么&#xff1f; 域名解析是让我们可以通过网站的域名来找到它对应的IP地址&#xff0c;以便更加方便的访问我们所需访问的网站的一种服务。 它通过DNS服务器来进行&#xff0c;我们输入所想要访问的域名&#xff0c;将会通过…

2024年最新软件测试必问面试题,面试前一天刷效果更佳

1.你为什么选择软件测试行业 因为之前有了解软件测试这个行业&#xff0c;觉得他的发展前景很好。 2.根据你以前的工作经验描述一下软件开发、测试过程&#xff0c;由那些角色负责&#xff0c;你做什么 要有架构师、开发经理、测试经理、程序员、测试员。我在里面主要是负责所…

python3 函数

Python 定义函数使用 def 关键字&#xff0c;一般格式如下&#xff1a; def 函数名&#xff08;参数列表&#xff09;&#xff1a;函数体 让我们使用函数来输出"Hello World&#xff01;"&#xff1a; >>> def hello() :print("Hello World!") &…

处理urllib.request.urlopen报错UnicodeEncodeError:‘ascii‘

参考&#xff1a;[Python3填坑之旅]一urllib模块网页爬虫访问中文网址出错 目录 一、报错内容 二、报错截图 三、解决方法 四、实例代码 五、运行截图 六、其他UnicodeEncodeError: ascii codec 问题 一、报错内容 UnicodeEncodeError: ascii codec cant encode charac…

DBeaver连接hive

1.新建hive连接 其中主机填写hive所在节点地址&#xff0c;端口10000为默认&#xff0c;数据库名不填则是默认default数据库&#xff0c;用户名密码填写hadoop集群中能操作hdfs的用户和密码。 2.编辑驱动&#xff0c;驱动的jar包从安装的hive下的jdbc路径下获取&#xff0c;例…

从 Google Gemini 到 OpenAI Q*(Q-Star):调研重塑生成人工智能(AI)的研究

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 这篇综述探讨了生成式人工智能不断发展的前景&#xff0c;重点关注混合专家&#xff08;MoE&#xff09;、多模态学习的变革性影响&#xff0c;以及对…

C# 的学习难度怎么样?

C# 的学习难度怎么样&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C#的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&a…

前端实现websocket类封装

随着Web应用程序的发展&#xff0c;越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同&#xff0c;Websocket允许服务器自主地向客户端发送…

【没有哪个港口是永远的停留~论文解读】Both Style and Fog Matter

Both Style and Fog Matter 原文&#xff1a;https://arxiv.org/pdf/2112.00484.pdf 解决问题&#xff1a;大雾、下雨、下雪天模糊场景 其他人做法&#xff1a; 1-去雾算法&#xff0c;人工干扰 2-合成的雾图像&#xff0c;不像真实的雾图像那样真实&#xff0c;也会扩大清…