深入理解动静态库和ELF文件格式

1.静态库

动静态库的本质实际上就是可执行的二进制形式,在我们的 linux 和 windows 里面的呈现出来的形式,后缀是有所差别的;

下面展示的就是不同的操作系统的后缀名字的区别,以及我从网上找的,大家可以回品势遇到的一些问题;

其实这个 dll 之类的文件在我们的日常的软件安装包里面是存在的,只不过我们更多情况下使用的还是这个 exe 之类的,其他的大部分小白都看不懂,也不会去关注这些事情,但是实际上他是和我们息息相关的;

静态库文件,也就是.a 文件,实际上是多个.o 文件打包形成的这个归档文件;

.o 文件是编译之后形成的文件,静态库可理解成为是.o 文件的即可,是编译之后的文件的代码库;

2.动态库

动态库和静态库没有太大的区别,基本使用的方式都是一样的;

动态库不是编译的时候被加载,而是执行的时候操作系统进行加载到内存里面去;

动态库在系统运行的时候会被加载,但是系统需要找到这个动态库相关的文件,具体的查找方法如下所示:

  1. 1.将库文件放在标准系统目录中(如/usr/lib)
  2. 2.创建软链接到标准目录。
  3. 3.设置环境变量 LD LIBRARY PATH 来添加自定义路径
  4. 4.使用 ldconfig 更新缓存,使系统快速查找。

动态库打包盒静态库基本一致,就是需要添加一下这个 share 参数表示这个是共享使用的;

3.编译链接简述

编译器编译之后形成的.o 文件,.o 打包可以形成这个静态库,链接的时候就是.o 文件和库的链接的过程形成可执行的程序;

动静态库和.o 文件都是 ELF 格式的,因此这个链接的过程本质上就是这个 ELF 文件格式里面的这个 section 字段的合并的过程;

相关推荐
nice_lcj5207 分钟前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
卷无止境8 分钟前
mathmodel-figure-templates 以及两个上手案例
后端·python
Moment9 分钟前
写给迷茫的应届生,怎样在 AI 时代争取更多机会
前端·后端·面试
回家路上绕了弯11 分钟前
为什么还是不能直接把需求丢给 AI?
后端
锋行天下1 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
桦说编程1 小时前
TransmittableThreadLocal 解读:从 CRR 机制到上下文所有权
java·后端·源码
喵个咪1 小时前
GoWind 拆解:全链 ID 类型体系——int64 定版与前端字符串化契约
前端·后端·go
喵个咪2 小时前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go
喵个咪2 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
前端·后端·go
喵个咪2 小时前
GoWind CMS 拆解:搜索三板斧——高亮、联想、同义词
后端·搜索引擎·go