转载自:https://blog.csdn.net/imxiangzi/article/details/45871949/
Linux 库分类
目前可以创建两种 Linux C/C++ 库:
静态库(.a):会被链接进目标代码,并成为应用程序的一部分。
动态共享链接库(.so):这种库只有一种结构,不过可以通过两种方式使用。
I. 运行时动态链接但是静态依赖,在编译/链接阶段这些库需要存在,共享库不会包含到可执行文件中,但是需要在运行时绑定。
II. 在执行过程中使用动态加载链接系统函数进行动态加载/卸载和链接(比如:浏览器插件)。
库命名规范
库通常使用 ‘lib’ 作为命名前缀,这适用于所有 C 标准库。当链接时,在命令行中引用该库将不需要包含该库的前缀或后缀。
考虑下面的链接命令:
gcc src-file.c -lm -lpthread
这个例子中,在链接时需要 math 库和 thread 库,他们保存在 /usr/lib/libm.a 和 /usr/lib/libpthread.a 中。
静态库
如何创建一个库(目标代码归档文件):
- 编译
gcc -Wall -c calc_*.c //编译成*.o中间文件
- 创建静态库
ar -cvq libcalc.a calc_*.o //打包生成*.a静态库文件
- 列出静态库中的文件
ar -t libcalc.a
- 链接库
gcc -o calc calc.c libcalc.a //链接同目录/系统目录下的静态库
gcc -o calc calc.c libcalc.a -L/path/to/lib -lcalc //链接其他目录的静态库