动态库又被称作共享库,编译时链接动态库,但是不加载目标代码,只有在运行时才加载相关的目标代码到内存,进程结束时自动释放所占内存。
动态库的建立
还是以排序函数sort.c与bank.h为例:
1.编辑sort.c与bank.h文件
2.生成sort.o文件
指令:gcc -c -fpic sort.c
选项-fpic的作用是将源文件编译成带有PIC标志的目标文件
3.将文件加入到动态库中
gcc -shared xxxxx.o yyyy.o -o libxxx.so
动态库的使用
和静态库一样,动态库也有参数法和直接法两种使用方法
1.参数法
格式:gcc 主程序 -l 动态库名(去掉lib和.so) -L 动态库地址
2.直接法
格式:gcc 主程序 动态库全名
将sort.c生成动态库libmath.so之后,再通过参数法与动态库进行链接生成可执行文件,如下图:
可以看见当执行a.out时,出现linux动态加载器找不到libmath.so文件的错误提示信息,我们知道动态库是在程序运行阶段进行链接,一般加载器会在/lib目录下搜寻动态库进行链接,所以一定要把建好的库移动到/lib目录下(需要root权限),执行过程如下: