在Linux系统开发中,我们频繁的使用动态库(又称共享库),它相较于静态库而言有节省空间、便于更新等优点。但同时,动态库也有其缺点,加载速度相较于静态库而言较慢。那么,为什么调用动态库内的函数要比调用静态库内函数速度慢呢?它的加载过程具体又是怎样的呢?我们可借助gdb调试工具和反汇编工具objdump来找寻原因。
首先准备简单的动态库测试函数:
![](https://i-blog.csdnimg.cn/blog_migrate/c9e551077b3dc4952c91b7eb5218ad1d.png)
准备测试程序:
![](https://i-blog.csdnimg.cn/blog_migrate/8085c4e1eb9cdc6ad1d9c816ef69db3d.png)
借助gcc工具生成动态库,链接动态库,编译生成可执行文件,并帮助动态链接器指定动态库加载位置。
- gcc -c -fPIC add.c sub.c mul.c
- gcc -shared -o libmymath.so add.o sub.o mul.o
- gcc main.c -o app -L ./ -l mymath -I ./
- export LD_LIBRARY_PATH=./
接下来,我们来研究下,在 main.c 中调用共享库