Linux05

文章讲述了库文件的两种主要类型——静态库和动态库,以及它们在程序部署和大小上的差异。静态库(.a文件)会将库代码包含到可执行程序中,而动态库(.so文件)在运行时加载。生成静态库涉及gcc命令和-ar工具,动态库则需要添加-fpic选项并使用共享库标志。此外,文章还提到了Makefile的重要性,它用于管理文件依赖关系和增量编译,简化了编译过程。
摘要由CSDN通过智能技术生成

库文件(轮子)

库文件:目标文件的集合*.o

  • 静态库和动态库
    • 农用车: 静态库(将库打包到产品[可执行程序库])
    • F1赛车:动态库(运行时才能加载到可执行程序)
可执行大小部署难度升级难度
静态库
动态库

生成静态库

  1. 生成目标文件gcc -c *.c
  2. 把目标文件打包成静态库 在这里插入图片描述
  3. 将静态库放到 /usr/lib目录下
  4. 链接时,需要加上静态库的名字
    $gcc main.c -o main -lalgo

生成动态库

  1. 编译成目标文件 加上-fpic
    $gcc -c add.c sub.c mul.c div.c -fpic
  2. 把目标文件打包成动态库
    $ gcc -shared add.o sub.o mul.o div.o -o libalgo.so
  3. 将动态库移动到usr/lib目录下
  4. 链接时加上-lalgo
    $ gcc main.o -o -lalgo

make(管理文件之间的依赖关系)

增量编译:修改了那个文件,就只需要编译那个文件
Makefile(脚本文件)
在这里插入图片描述

  • makefile :规则的集合
  • 规则:
    • 目标
    • 依赖
    • 命令
  • 什么时候会执行命令?
    1. 目标不存在
    2. 依赖比目标新
      在这里插入图片描述
      Make原理
  • DAG(有向无环图):表示文件之间的依赖关系
  • 拓扑排序:任务调度,(图的深度优先遍历)
    在这里插入图片描述

Makefile进阶(了解)

  1. 伪目标
    在这里插入图片描述

  2. 变量

    1. 自定义变量
    变量名:=值(只有字符串类型)
    引用变量:$(变量名),如果变量名为单个字符,只可以省略()eg:$A
    
    1. 预定义变量
      在这里插入图片描述
    2. 自动变量(随着规则的不同,自动变量具有不同的值)
      在这里插入图片描述
  3. 内置函数

%:去匹配上一个规则的依赖
Wildcard 通配符 :从目录中查找符合要求的文件名
patsubst:根据模式进行替换
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值