linux操作系统中的动静态库(未完)

1. 静态库与动态库

  • 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库
  • 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码
  • 在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)
  • 动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。

2.静态库

生成静态库

bash 复制代码
ar -rc libxxx.a add.o sub.o

查看静态库中的目录列表

bash 复制代码
ar -tv libxxx.a
t:列出静态库中的文件
v:verbose 详细信息

链接静态库

-L 指定库路径 -l 指定库名 测试目标文件生成后,静态库删掉,程序照样可以运行。

库搜索路径

  • 从左到右搜索-L指定的目录。
  • 由环境变量指定的目录
  • (LIBRARY_PATH) 由系统指定的目录

/usr/lib

  • /usr/local/lib

3. 动态库

生成动态库

  • shared: 表示生成共享库格式
  • fPIC:产生位置无关码(position independent code)
  • 库名规则:libxxx.so

使用动态库

编译选项

  • l:链接动态库,只要库名即可(去掉lib以及版本号)
  • L:链接库所在的路径.

这里有一个让我疑惑的点

这里如果不是一步到位

而是这样使用

如下形成的两个.gch不能被打包静态库的命令识别

通过动态库编译1形成可执行文件

相关推荐
开心大爆炸15 分钟前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
oushaojun244 分钟前
大厂 C++ 面试:深度剖析 Linux Signal 信号机制(转)
linux
苏生Susheng2 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
2601_962304912 小时前
把出片接进自动化流水线:2026 年批量 AI 视频生成工具的脚本契约与同类项目对照
运维·人工智能·自动化
曹牧2 小时前
C#:文本文件读取
服务器·前端·c#
Ruiery2 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
分支预测失败2 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端
GeW2 小时前
RHCE学习拿证计划:锁定核心考点,实现备考效率最大化
linux
snow@li2 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
实战派K8S&DB2 小时前
《基于 Dify + FastAPI + PyTiDB 搭建大模型驱动的 TiDB 智能运维 Agent》
运维·数据库·分布式·云原生·tidb·fastapi