当前位置:首页 > 系统教程 > 正文

Linux库制作与原理 (从零开始掌握静态库与动态库)

Linux库制作与原理 (从零开始掌握静态库与动态库)

手把手教你制作和使用Linux库

Linux库制作与原理 (从零开始掌握静态库与动态库) Linux库制作  静态库 动态库 链接原理 第1张

在Linux开发中,Linux库制作是一项必备技能。库(Library)是封装好的代码集合,可供其他程序调用。它主要分为静态库动态库,理解它们的链接原理对于优化程序体积和性能至关重要。

1. 什么是库?

库是一组预先编译好的函数的集合,例如标准C库(libc)。使用库可以避免重复编译相同代码,便于模块化开发。

2. 库的类型

静态库(.a):在链接阶段被完整复制到可执行文件中,因此可执行文件运行时不再依赖库文件。 动态库(.so):在程序运行时动态加载,多个程序可共享同一份库代码,节省内存和磁盘空间。

3. 链接原理浅析

编译过程分为预处理、编译、汇编、链接。链接阶段主要处理符号解析和重定位。静态链接在此时将所有依赖合并到可执行文件;动态链接则生成可执行文件中的“占位符”,运行时由动态链接器加载库并完成重定位。

4. 制作静态库

假设我们有源文件 add.c 和 sub.c,以及头文件 math.h。编译成目标文件:

gcc -c add.c sub.c

使用 ar 命令创建静态库:

ar rcs libmath.a add.o sub.o

5. 使用静态库

编译主程序 main.c 并链接静态库:

gcc main.c -L. -lmath -o prog

6. 制作动态库

编译源文件为位置无关代码(-fPIC):

gcc -fPIC -c add.c sub.c

创建动态库:

gcc -shared -o libmath.so add.o sub.o

7. 使用动态库

编译时链接动态库:

gcc main.c -L. -lmath -o prog

运行前需要让系统找到动态库: - 将库路径加入 /etc/ld.so.conf 并运行 ldconfig - 或设置环境变量 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

8. 库搜索路径

链接器默认搜索 /lib, /usr/lib 以及 -L 指定的路径。运行时动态链接器搜索 /etc/ld.so.conf 中的路径和 LD_LIBRARY_PATH。

9. 总结

掌握Linux库制作链接原理,可以更高效地管理代码。静态库适合独立分发的小工具,动态库则广泛用于系统级共享组件。动手实践一下,用静态库动态库改造你的项目吧!