Linux开发工具——gcc/g++

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在windows下我们有编译器来进行代码的预处理、编译、汇编、链接,那么在Linux下我们如何来运行代码的呢?这就是本篇文章所要记录的知识,在windows下有编译器,在Linux下有开发的工具来运行代码。

目录

gcc/g++

预处理(进行宏替换)

编译(生成汇编)

汇编(生成机器可识别代码) 

连接(生成可执行文件或者库文件)


gcc/g++

gcc是用来编译运行C语言代码,而g++既可以编译运行C++还可以C语言,因为c++兼容C语言。

那么如何来使用gcc/g++呢?正常情况下我们想要代码运行的最终结果就直接使用gcc/g++带文件名称就可以生成一个可执行文件,./+该可执行文件就可以运行了。而gcc/g++的活就是预处理、编译、汇编、链接生成可执行文件。

示例:

-o选项可以重命名该可执行文件,不加-o生成的可执行文件就是a.out

预处理(进行宏替换)

使用gcc/g++进行代码编译,首先就是预处理这个步骤,预处理阶段需要做哪些事情呢?一般我们写的代码会有宏定义、注释等,而预处理的工作就是对代码进行宏替换,去注释,展开头文件等,通过gcc/g++指令可以观察预处理之后的代码。选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程,选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

示例:

gcc -E 这个指令就是告诉gcc,从现在开始程序的翻译工作,将预处理工作做完就停下来,不再继续往下走。

编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

示例:

汇编(生成机器可识别代码) 

汇编阶段是把编译阶段生成的“.s”文件转成目标文件。
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。

示例:

 

通过vim来查看test.o文件看到的是一堆乱码。只有机器能看懂。 

以上三个指令有记忆的小技巧,和键盘最左上角的Esc是一样的,只不过指令的s需要大写。文件后缀iso。

连接(生成可执行文件或者库文件)

这里就跟函数库有关,在我们写代码时使用一些函数,但是我们并没有实现这个函数却可以使用它,因为系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到
系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函
数“printf”了,而这也就是链接的作用。

库也有自己的命名规则:bliname.so.xxx,默认是动态库

而函数库分为静态和动态库,两者各有各的优缺点。

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”,优点:不依赖库,程序可以独立运行。缺点:体积大,比较消耗资源。
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。优点:由于是共享库,有效节省资源。缺点:动态库一旦丢失,导致各个程序将不能运行。

gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件。加上“-static”提供静态库。

由于动态库是默认安装的,所以我们需要自己手动(使用root账号安装)安装静态库:

C语言静态库安装:yum install -y glibc-static

示例:

普通用户需要使用sudo提权来安装,提权的前提是该用户在系统的白名单中。 

C++静态库安装:yum install -y libstdc++-static

示例:

gcc选项


-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-w 不生成任何警告信息。
-Wall 生成所有警告信息 

Linux】超好用的编译工具 —— gcc/g++ 记忆gcc选项的小技巧: 预处理、编译、汇编对应的gcc选项分别是 “-E”、“-S”、“-c”,我们把这几个字母连起来也就是键盘的最左上角那个键【Esc】,我们只需要记住E和S是大写的,c是小写的即可。 而预处理、编译、汇编后形成的文件后缀连起来就是【iso】(iso也就是镜像文件的后缀)。 所以最后我们只需要记住选项【Esc】对应文件后缀【iso】即可。 阅读详情

相关推荐

Linux编译器——gcc/g++使用

Linux编译器——gcc/g++使用

m0_56069910的博客 4537

Linux编译gcc/g++的使用

本篇文章讲解的是Linux下的gcc/g++编译器的使用以及动静态的初步认识。

malloc不出对象的博客 1308

第五章 linux编译器——gcc/g++的使用

第五章 linux编译器——gcc/g++的使用

Turing_Sheep的博客 1898

Linux g++主要编译参数

1. GCC概述 GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。而GCC下面有两个比较常用的工具就是gcc(GUN C Compiler)和g++(GUN C++ Compiler),即C语言编译器和C++编译器。人们通常用gcc编译纯C代码,用g++编译C++代码。实际上可以用直接用g++编译C或者C++代码,本文我们学习怎样使用g++GCC 编译器支持编译 Go、Object-C、Object-C ++、Fortran、Ada、BRI

小米的修行之路 1858

Linux基础开发工具gcc/g++

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU项目开发的编程语言编译器。它最初被设计为GNU操作系统的标准编译器,现在已经成为大多数类Unix操作系统(如Linux、BSD、MacOS X等)的标准编译器。gccg++都是GNU(组织)的一个编译器。它们的主要区别有C 代码:优先使用 gcc,避免引入不必要的 C++ 依赖。C++ 代码:优先使用 g++,简化编译流程。混合代码:分别用 gcc 编译 C 代码,g++ 编译 C++ 代码。

渣檬Charman的博客 1179

Linux基础——Linux开发工具(中)_gcc/g++

在理解完本篇之后希望各位都能理解gcc/g++的四个步骤,gdb的简单使用方法!Linux开发工具(yum, vim)

EterNity_TiMe_的计算机学习之路 680

Linux开发工具的使用(二):gcc/g++与make/makefile

本文介绍了Linux环境下常用的编译工具gcc/g++以及项目自动化构建工具make/Makefile的使用方法。gcc主要用于C语言编译g++则用于C++,二者使用原理相同。编译过程分为预处理、编译、汇编和链接四个阶段,通过不同选项控制生成不同类型的中间文件。文章还详细说明了静态链接与动态链接的区别及优缺点,静态链接将库代码直接嵌入可执行文件,而动态链接则在运行时加载共享库。此外,文章介绍了Makefile的基本结构和自动化推导功能,如何通过伪目标.PHONY实现强制重新编译,以及如何使用自动变量简化M

Surplus886的博客 1976

Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用

当用户想下载软件或工具时,都需要到特定位置进行下载,比如你在手机上下载app,需要到对应的应用商城下载。类似的,在Linux系统下也有下载的需求,通常来说下载方式主要有以下几种:1.源代码安装:下载程序的源码,进行编译得到可执行程序之后使用,非常不方便。2.rpm包安装:将源码提前在各种不同环境下编译好,形成一种压缩包叫rpm包,直接下载可执行程序就能安装好,实际上就是把可执行程序拷贝到指定路径下。但是主要可能会存在软件之间依赖问题,比如还需要你安装其他软件,额外的库之类的。3.yum/apt安装。

2301_79448270的博客 2046

Linux基础(5)】Linux中的开发工具(2)--gcc/g++使用

上一篇文章重点介绍了Linux编译器–vim的使用。但是只在vim中写好代码是无法执行的,只有把代码编译链接生成可执行文件才能。本篇文章介绍gcc/g++的使用,可以知道代码是如何从普通文件变成可执行文件的。

2301_77900444的博客 1284

Linux基础环境开发工具apt、vim和gcc/g++

Linux中有三种软件安装方式:源代码安装,rpm包安装和apt安装。我们的Linux机器中一定内置了目标服务器的地址链接,apt才可以到服务器找到对应安装包下载。比如现在下载一个sl运行卸载推荐一个htopUbuntu有两种软件:base基本软件源,文档;epel,扩展软件源(新软件)。软件源这里的sources.list就是。

syxsanze的博客 860

初识LinuxLinux开发工具gcc/g++和gdb以及Makefile的使用

预处理器(cpp)将。

2302_79860961的博客 929

[Linux开发工具]——gcc/g++的使用

1.函数库函数库一般分为静态库和动态库两种。动静态库本质就是文件,头文件也是文件。2.动静态库优缺点(动态链接)优比较节省资源,不会出现太多的重复代码----资源磁盘,内存,网络等资源。缺点:对库的依赖性比较强----旦库丢失,所有使用这个库的程序都无法运行。(静态链接)优:不依赖库,同类型平台中都可以直接运行使用。缺点:可执行程序体积比较大,比较浪费资源----资源磁盘,内存,网络等资源3.生成动静态库的命令。

plj521的博客 1425

Linux环境开发工具gcc/g++

gcc/g++的使用和程序的翻译过程

cp 1590

Linux开发工具gcc/g++的使用

Linux下皆文件,在Linux下文件不分文件的后缀,文件的类型是看文件前面的字符今天要学习的gccg++就是Linux下的程序它们是要看文件后缀的!gcc: C语言编译器,只能编译C语言g++: C++编译器,C/C++都可以编译

RO-BERRY 964

Linux基础开发工具apt,vim,gcc/g++

此文包含sudo白名单的添加

2401_87941709的博客 335

Linux】环境基础开发工具使用——gcc/g++使用

定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make。只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么。这个文件,并把这个文件作为最终的目标文件。

风铃子加油的博客 1592

Linux升级路』基础开发工具——gcc/g++

在前面的文章中我们学会了vim的用法,可以写一些代码,要想让我们的代码运行起来,还需要我们学会编译工具gccg++的使用。

小王又困了的博客 2118

Linux开发工具gcc/g++

本文包括Linux开发工具gcc/g++的讲解和使用,动静态库的基本介绍,自动化构建工具make/Makefile的讲解和使用,以及sudo提权的讲解和配置,干货满满!

cw412524的博客 722

Linux基础开发工具----yum、vim和gcc/g++

• 在Linux下安装软件,⼀个通常的办法是下载到程序的源代码,并进⾏编译,得到可执⾏程序.• 但是这样太⿇烦了,于是有些⼈把⼀些常⽤的软件提前编译好,做成软件包(可以理解成windows上 的安装程序)放在⼀个服务器上,通过包管理器可以很⽅便的获取到这个编译好的软件包,直接进⾏安 装.• 软件包和软件包管理器,就好⽐"App"和"应⽤商店"这样的关系.

Wangshijie1015的博客 979
上一篇: Linux软件管理包-yum和基础开发工具-vim
下一篇: Linux中的git命令
火鸡面H_H
博客等级 码龄3年 395粉丝 47原创
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火鸡面H_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值