当前位置: 首页 > 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

http://www.xdnf.cn/news/120799.html

相关文章:

  • 网络IP冲突的成因与解决方案
  • 【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享
  • JDBC插件式数据库连接器
  • IO 核心要点(1)
  • 基于 EFISH-SBC-RK3588 的无人机智能巡检终端方案‌
  • 5G/6G通信设备中的盲埋孔技术突破
  • 数据结构-查找
  • 第六章 QT基础:5、QT的UDP网络编程
  • 【前端】【业务场景】【面试】在前端开发中,如何实现实时数据更新,比如实时显示服务器推送的消息,并且保证在不同网络环境下的稳定性和性能?
  • 如何轻松将 Python 英文版切换至中文界面
  • 垂直分表和水平分表涉及的不同场景?如何决定使用水平分表还是垂直分表?
  • HT7180输入电压2.7-12V输出电压最高12.8V禾润一级代理聚能芯半导体
  • 【verilog】单/多if语句优先级
  • 大数据赋能零售,打造个性化购物新纪元
  • UML 活动图深度解析:以在线购物系统为例
  • 深入了解递归、堆与栈:C#中的内存管理与函数调用
  • 第二篇:Django配置及ORM操作
  • 【mongodb】系统保留的数据库名
  • 复杂性决策-思维训练
  • Linux之安装配置Nginx
  • 如何获取适用于视频编辑优化的谷歌浏览器【提升视频编辑体验】
  • ThreadLocal线程本地量
  • 第六章:LangChain - LCEL 驱动的高级 RAG 实战
  • html单页业务介绍源码
  • Day11(回溯法)——LeetCode79.单词搜索
  • 26考研|数学分析:数项级数
  • PyQt6基础_QTabWidget
  • 基于霍尔效应传感器的 BLDC 电机梯形控制方案详解
  • JVM性能优化之年轻代参数设置
  • 23种设计模式-行为型模式之模版方法模式(Java版本)