📜  使用共享库 | 2套(1)

📅  最后修改于: 2023-12-03 15:36:38.203000             🧑  作者: Mango

使用共享库 | 2套

在开发过程中,我们经常会用到一些模块或者函数库。但是如果每次都将这些代码复制到新的项目中,就会造成代码冗余,也不利于代码的维护和更新。

共享库就是为了解决这个问题而出现的。它将一些常用的代码编译生成单独的库文件,供其他程序调用。这样就可以减少代码复制,提高开发效率。

在Linux系统中,共享库有两套:静态库和动态库。

静态库

静态库是将代码编译为目标文件,再将目标文件打包成库文件,供其他程序静态链接使用。静态链接时,链接器将库文件的代码和目标程序的代码合并生成可执行文件,因此静态库的代码会被完整地复制到生成的可执行文件中。

静态库的优点

  1. 静态库的可移植性更好,因为静态库的代码是被完整复制到可执行文件中的,而动态库则需要在不同的系统中进行动态链接。
  2. 静态库的加载速度更快,因为在加载可执行文件时,不需要再去查找和加载动态库。
  3. 静态库的使用更加安全,因为静态库的版本是固定的,不会因为系统环境的变化而产生不兼容的问题。

静态库的缺点

  1. 静态库会增加可执行文件的大小,尤其是当库文件很大时,会导致可执行文件的体积变得很大。
  2. 静态库不能在运行时更新和修改,因此每次更新和修改都需要重新编译和链接。
动态库

动态库是将代码编译为库文件,供其他程序动态链接使用。动态链接时,链接器只将程序需要的函数或符号链接到可执行文件中,因此生成的可执行文件会变得比较小。

动态库的优点

  1. 动态库不会增加可执行文件的大小,因为动态库的代码不是被完整复制到可执行文件中的,而是在运行时动态加载的。
  2. 动态库的使用更加灵活,因为动态库可以在运行时更新和修改,而不需要重新编译和链接。

动态库的缺点

  1. 动态库的加载速度比静态库慢,因为需要查找和加载动态库。
  2. 动态库的可移植性不如静态库,因为动态库需要在不同的系统中进行动态链接。
如何使用共享库

使用静态库

编译生成静态库
# 生成目标文件
gcc -c lib.c -o lib.o

# 打包静态库
ar rcs lib.a lib.o
静态链接
gcc main.c -L. -lfoo -o main

使用动态库

编译生成动态库
# 生成目标文件
gcc -fPIC -c lib.c -o lib.o

# 生成动态库
gcc -shared -o libfoo.so lib.o
动态链接
gcc main.c -L. -lfoo -o main
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
./main

以上就是关于共享库的介绍和使用方法。根据实际情况选择使用静态库或者动态库,以达到更好的开发效率和良好的可移植性。