【Linux】GCC编译器的使用

19 篇文章 12 订阅
订阅专栏

目录

前言:

 一、GCC编译过程

1.预处理:

2.编译

3.汇编

4.链接

二、制作、使用动态库和静态库

1.静态库

2.动态库

 三、好用的选项

 1.gcc -E main.c

 2.gcc -E -dM main.c > 1.txt

  3.gcc -Wp,-MD,abc.dep -c -o main.o main.c

  4.echo 'main(){}'| gcc -E -v -


前言:

2-1.GCC编译过程_哔哩哔哩_bilibili

2-2.GCC常用选项_哔哩哔哩_bilibili

(1)PC机上的gcc编译工具链,编译出来的程序是可以在X86平台上运行,要编译出能在ARM平台上运行的程序,必须使用交叉编译工具xxx-gcc。

(2)一个C/C++文件要经过预处理(生成.i文件)编译(生成.s)汇编(生成.o文件)以及链接(链接上应用程序)四步才能变成可执行文件。如下:

(3)我们可以通过不同的gcc选项控制输出不同的文件,常用的选项如下:

 一、GCC编译过程

1.预处理:

C/C++源文件中常见的预处理命令,有包含命令(#inlcude),宏定义命令(#define)以及条件编译命令(#if、#ifdef)。

预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件 编译命令选择要使用的代码,最后将这些东西输出到一个.i文件中等待进一 步处理

2.编译

编译就是将C/C++代码(上述.i文件)“翻译”成汇编代码。

3.汇编

 汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,在Linux 系统上一般表现为ELF 目标文件(OBJ 文件)。

4.链接

链接就是将上步生成的 OBJ 文件和系统库的 OBJ 文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件。 

二、制作、使用动态库和静态库

着重注意使用的库的路径。

1.静态库

利用静态库编译成的文件比较大,是将整个函数库的所有数据整合到目标代码中,它的优点是编译后的执行程序不需要外部的函数库支持。

gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
//由.o文件创建静态库
ar crs libsub.a sub.o 
//(如果.a 不在当前目录下,需要指定它的绝对或相对路径)
gcc -o test main.o libsub.a 

注:使用ar命令生成静态库,必须要用.o文件生成(不能用其它文件)。并且生成的.a文件必须要以lib开头(要不会找不到库)。

2.动态库

动态函数库在编译的时候没有编译进目标代码中,程序执行到相关函数时调用该函数库里的相应函数。

所以动态库相较于静态库来说,节省了系统空间,遇到库有bug时,只要用新的库把原来的库替换即可。

gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
gcc -shared -o libsub.so sub.o
gcc -o test2 main.o -L   /所在目录/  -lsub 
//(以当前目录为例)
gcc -o test2 main.o -L ./ -lsub

 注:生成的动态库文件是在当前文件夹,编译时需要将其路径加入lib或者指定好所在路径。

如果没有lib时,运行时还需要运行下面的命令(指定路径):

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: ./
./test2

运行测试(指定路径): 

 三、好用的选项

 1.gcc -E main.c

查看预处理结果,比如头文件是哪个 ,具体结果:

 2.gcc -E -dM main.c > 1.txt

 把所有的宏展开,存在 1.txt 里,具体示例(打开1.txt): 

  3.gcc -Wp,-MD,abc.dep -c -o main.o main.c

生成依赖文件 abc.dep,后面 Makefile 会用,具体示例(打开abc.dep):

  4.echo 'main(){}'| gcc -E -v -

编译'main(){}'时列出其头文件目录、库目录(LIBRARY_PATH),具体示例:

linux gcc 编译器使用手册
06-25
linux gcc 编译器使用手册 英文版 4.5.0
Linux编译器-gcc/g++使用
h593245631的博客
04-29 328
1. 背景知识 预处理(进行宏替换) 编译(生成汇编) 汇编(生成机器可识别代码) 连接(生成可执行文件或库文件) 1 #include<stdio.h> 2 #define ADD(x,y) (x+y) 3 4 int main() 5 { 6 printf("%d",ADD(2,3)*3);//ADD() ...
Linuxgcc编译常用命令详解
最新发布
马上到我碗里来的博客
02-29 742
通过掌握这些常用的gcc编译命令,开发者可以更灵活、高效地进行程序开发和调试。同时,深入了解这些命令的原理和使用方式,有助于更好地理解编译过程,提高编程水平。希望本篇blog对您在Linux环境下使用gcc编译器有所帮助。
LinuxLinux环境基础开发工具使用(三)gcc/g++ 编译器Linux编译器-gcc/g++编译器使用 选项以及介绍 、gcc编译过程的详细讲解 、函数库,动静态库的理解】
NiNi_suanfa的博客
11-30 995
在这里涉及到一个重要的概念:函数库我们的C程序中,并没有定义“printf”的函数实现。且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现。那么,是在哪里实现 “printf”函数 的呢?最后的答案是:系统把这些函数实现都被做到名为libc.so.6的库文件中去了。在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去C语言有自己的标准库,默认给你链接到上面去了。
Linuxgcc使用(一看就会系列)
lucky_starr的博客
01-02 1万+
写在前面:gcc是“GNU Compiler Collection”的缩写,从字面意思可以知道它是一个编译器集。gcc不止可以编译器c语言,还能用于c++,java,object-C等语言程序。但是在这里,我们的嵌入式学习中,目前只去关注gcc在C语言方面的编译功能。 1.gcc的安装(以Ubuntu为例) sudo apt-get install build-essential 安装完后可以通过 gcc --version 查看版本。 让我们在通过gcc编译可执行文件的过程中掌握其基础应.
Linux编译器gcc使用
l_shadow_m的博客
07-28 2142
Linux编译器gcc使用
Linux编译器——gcc/g++使用
m0_56069910的博客
04-09 3903
Linux编译器——gcc/g++使用
Linux基础开发工具之Linux编译器使用(gcc/g++)
weixin_68624665的博客
07-25 708
大家好呀,许久没给大家更新了,对于我们在Linux环境下编程,之前小编只是给大家介绍了有关编辑器vim的相关操作,但是对于我们编辑后关键是生成对应的可执行程序,那么产生可执行程序就一定需要使用我们相关的编译器,那么今天给大家带来的就是我们Linux环境下编译器使用
Linux环境下GCC基本使用详解(含实例)
热门推荐
qq_39872252的博客
09-27 1万+
GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件。本文介绍了gcc的安装和基本使用命令,以及通过实例介绍了程序的预处理、编译、汇编、链接过程。
Linuxgcc编译器
weixin_60371270的博客
01-11 5379
本文主要介绍了gcc编译器编译C语言代码的基本过程。
GCC常用规则和Makefile通用规则解析
l824828的博客
04-09 1035
GCC常用规则和Makefile通用规则解析 Makefile在编译场景中经常会用到,以前对Makefile是一知半解,只是知道怎么添加文件,怎样编译指定目标,内部是具体怎样运作的,基本上不了解,这篇文章来阐述一下Makefile的基本规则,主要是linux编译下面的Makefile规则。本文会先从GCC的简单使用过渡到借助Makefile进行直接make。的如过有有问题的地方,欢迎在评论区留言一...
centos linux gcc 编译器
03-22
CentOS 7 GCC 离线安装包,Linux系统安装编译软件必备编译器
实验3使用gcc编译器.pdf
10-02
实验3使用gcc编译器.pdf
linux下载安装gcc编译器
10-14
GCC的初衷是为GNU操作系统专门编写一款编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOS X等)采纳为标准的编译器,甚至在微软的Windows上也可以使用GCCGCC支持多种计算机体系结构芯片,如x86、ARM、MIPS...
gcc.zip_gcc编译器_linux
09-15
GCC编译器资料,纯英文版本,需要有英文基础的
Linux基础】GCC编译工具简介和具体流程(一文读懂)
孤生i的博客
09-22 1817
本篇,我们将重点介绍在Linux系统下的GCC编译工具及编译的具体流程。
LinuxLinux编译器-gcc/g++使用
weixin_60478154的博客
10-24 4817
LinuxLinux编译器-gcc/g++使用
gcc的-Wp,MD参数
chungle2011的专栏
09-01 5389
-wp,-MD 会生成相应的依赖文件,这是一个linux kernel中使用的例子   gcc -Wp,-MD,usr/.gen_init_cpio.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer     -o usr/gen_init_cpio usr/gen_init_cpio.c
linuxgcc编译器使用
06-28
Linux 中的 GCC 编译器使用方法如下: 1. 安装 GCC 编译器: 使用终端输入 `sudo apt-get install gcc` 命令进行安装。 2. 编写源代码: 使用文本编辑器编写 C/C++ 源代码。 3. 编译源代码: 使用终端输入 `gcc -o ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 【Linux】输入系统详述 + 触摸屏应用实战(tslib) 4652
  • 【Linux】proc文件系统 3322
  • ACM各种输入模式总结(C++) 3168
  • 【五一创作】Linux---I2C应用编程 2883
  • 【Linux】驱动内核调试,是需要几板斧的 2492

分类专栏

  • 代码随想录感想 20篇
  • Java 数值计算 1篇
  • 嵌入式Linux驱动 19篇
  • 数据结构与算法 2篇
  • C/C++编程 1篇

最新评论

  • 错误: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.

    希希雾里: 那没什么问题了,是这个文件大小,你跑跑看

  • 错误: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.

    x_lcw: 报错了我等它下载完,之后又运行了几次../repo/repo sync -j4,直到没有报错产生了,就是不知道有没有下载完整,下载完之后,Linux4.9.88内核源码690M,但是压缩之后再传到Windows,windows解压后就是673M了

  • 错误: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.

    希希雾里: 增大缓存空间,设置成功后还是不行,一般就是网络问题了,可能你VPN没关?

  • 错误: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.

    x_lcw: 不行啊,还是报错 error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function. 我真服了,搞了两天了,就是下不下来。。

  • 代码随想录-二叉树(节点)

    CSDN-Ada助手: 算法 技能树或许可以帮到你:https://edu.csdn.net/skill/algorithm?utm_source=AI_act_algorithm

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 代码随想录-二叉树(节点)
  • 代码随想录-二叉树(路径问题)
  • 代码随想录-二叉树(基础理论)
2024年4篇
2023年37篇
2022年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

希希雾里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值

聚圣源牙所起名月落归林爱情箴言扬州公交找工作上前程无忧适合起名字的诗词专业合作社取名起名大全欧式马赛克冯姓女孩起名满分名字圣经 公司起名字光明之魂2攻略bt之家电影100坪姓潘女孩起名字医疗设备厂起名深情密码南海事件在线塔罗魔兽改建器商店起名 大全和宁起名浠字的起名禁忌张姓双胞胎起名公司应该怎么起名字五行五行缺土的土起名仗朝网络适配器不见了云南卫视在线直播观看欠钱不还起诉了会黑名单在线店铺起名软件淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化