[Linux C]Linux中的静态库、动态共享库和可加载库

转载自: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 //链接其他目录的静态库

猜你喜欢

转载自blog.csdn.net/zimengyu2020/article/details/80051341