📅  最后修改于: 2023-12-03 15:36:38.203000             🧑  作者: Mango
在开发过程中,我们经常会用到一些模块或者函数库。但是如果每次都将这些代码复制到新的项目中,就会造成代码冗余,也不利于代码的维护和更新。
共享库就是为了解决这个问题而出现的。它将一些常用的代码编译生成单独的库文件,供其他程序调用。这样就可以减少代码复制,提高开发效率。
在Linux系统中,共享库有两套:静态库和动态库。
静态库是将代码编译为目标文件,再将目标文件打包成库文件,供其他程序静态链接使用。静态链接时,链接器将库文件的代码和目标程序的代码合并生成可执行文件,因此静态库的代码会被完整地复制到生成的可执行文件中。
动态库是将代码编译为库文件,供其他程序动态链接使用。动态链接时,链接器只将程序需要的函数或符号链接到可执行文件中,因此生成的可执行文件会变得比较小。
# 生成目标文件
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
以上就是关于共享库的介绍和使用方法。根据实际情况选择使用静态库或者动态库,以达到更好的开发效率和良好的可移植性。