本文带你走进 Linux库制作 的世界,从概念到实践,彻底搞懂 静态库 和 共享库 的制作与使用,并初步探索背后的 库原理。适合完全零基础的小白,手把手教学!
在Linux开发中,库(Library) 是一组预编译好的函数和数据,供其他程序调用。使用库可以避免重复编译相同代码,实现模块化,也让程序更易于维护。常见的库分为两类:静态库(.a)和 共享库(.so,也叫动态库)。
静态库 在链接阶段会被直接复制到可执行文件中,因此最终程序不依赖外部库文件。下面我们通过一个数学库的例子来演示 Linux库制作 的完整流程。
创建两个简单函数:add.c 和 sub.c。
// add.cint add(int a, int b) { return a + b;}// sub.cint sub(int a, int b) { return a - b;} 使用 gcc -c 生成 .o 文件:
gcc -c add.c sub.c 此时会得到 add.o 和 sub.o。
ar rcs libmymath.a add.o sub.o 参数说明:r 插入文件,c 创建库,s 建立索引。运行后得到 libmymath.a,这就是我们制作的 静态库。
编写 main.c 调用库函数:
// main.c#include int add(int, int);int sub(int, int);int main() { printf("10+5=%d", add(10,5)); printf("10-5=%d", sub(10,5)); return 0;} 编译链接:
gcc -o main main.c -L. -lmymath -L. 表示在当前目录查找库,-lmymath 表示链接 libmymath.a(省略前缀lib和后缀.a)。运行 ./main 即可看到结果。
共享库 在程序运行时才被加载,多个程序可共享同一份库代码,节省内存和磁盘空间。它的制作与静态库略有不同。
使用 -fPIC 选项生成与位置无关的目标文件:
gcc -fPIC -c add.c sub.c gcc -shared -o libmymath.so add.o sub.o 得到 共享库 libmymath.so。
编译 main.c:
gcc -o main main.c -L. -lmymath 此时生成的可执行文件依赖于 libmymath.so。运行前需要让系统知道库的位置(否则会提示找不到):
export LD_LIBRARY_PATH=. 然后执行 ./main。也可以将库复制到 /usr/lib 等标准路径。
理解 库原理 能帮助我们写出更高效的代码。静态库的本质是在链接时将需要的代码直接复制到可执行文件;而共享库则是在程序启动或运行时由动态链接器将库映射到进程地址空间,并通过符号重定位完成调用。动态库的加载方式使得多个进程可以共享物理内存中的同一份代码,这是现代操作系统的重要特性。
本文我们亲手实践了 Linux库制作 的基本流程,区分了 静态库 和 共享库 的制作与使用,并简单介绍了背后的 库原理。在后续文章中,我们将深入分析库的加载过程、符号解析规则以及如何编写更复杂的库项目。希望这篇教程对你有帮助!
本文关键词: Linux库制作、静态库、共享库、库原理
本文由主机测评网于2026-03-01发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260327922.html