当前位置: 首页 > news >正文

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

1.预处理(进行宏替换)

-E开始进行程序编译,在预处理做完的时候,停下来

2.编译(生成汇编)

-S 开始编译,编译做完了就停下来

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

-c 开始翻译汇编完成,就停下来

hello.o可重定位目标文件(已经是二进制的了),并不能执行

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


函数库一般分为静态库与动态库

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc hello.o –o hello

gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证。

make/makefile

make是一个命令,makefile是一个文件

第一行:依赖关系

第二行:tab键开头,依赖方法

完善makefile

make命令扫描makefile文件的时候,从上往下扫描,默认形成第一个目标文件

伪目标:总是被执行,对应的依赖方法和依赖关系

什么叫做不执行?默认老代码不做重新编译

make怎么知道bin和.c的新旧问题

维护类似于栈,从上向下读取

$@:代表目标文件

$^:依赖的众多文件列表

显示过程:

如果有多个文件

version1:

%:把当前路径下所有的.o/.c依次展开

进度条--命令行版本

一个进度条应该结合场景

process.c

main.c

相关文章:

  • 【hexo主题自定义】
  • OpenFeign和Gateway
  • Android Build Variants(构建变体)详解
  • NEWport太阳光模拟器与AVANTES光谱仪与太阳能模拟器光谱匹配度检测应用
  • 【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建
  • Unity性能优化实战:用Profiler揪出卡顿元凶 (CPU/GPU/内存/GC全面解析) (Day 37)
  • java延迟map, 自定义延迟map, 过期清理map,map能力扩展。如何设置map数据过期,改造map适配数据过期
  • 2024浙江省赛A Bingo
  • AGP8+ fullMode 完全模式混淆闪退
  • 长城智驾重复造轮子
  • TIM输入捕获知识部分
  • 77. 组合
  • SQL进阶知识:七、数据库设计
  • 怎样通过互联网访问内网 SVN (版本管理工具)提交代码更新?
  • 第13章:MCP服务端项目开发实战:向量检索
  • JAVA | 聚焦 OutOfMemoryError 异常
  • 究竟什么是自动化测试?
  • ecovadis认证需要提供哪些文件?ecovadis认证优势是什么?
  • 传感器测量(图片流程)
  • 经典算法 区间统计种类
  • “归雁经济”能带来什么?川大商学院调研团队深入乡村与返乡青年人才交流
  • 刘非履新浙江省委常委、杭州市委书记,曾在吉湘云多省任职
  • 在黄岩朵云书院,邂逅陈丹燕与月季花的故事
  • 《哪吒之魔童降世》电影版权方诉《仙侠神域》游戏运营方侵权案开庭
  • 第四届全民阅读大会在太原举办,李书磊出席并讲话
  • 广西北海市人大常委会副主任李安洪已兼任合浦县委书记