动态链接库(dynamic libs),又称为共享库(shared libs),与静态链接库不同,前者分为两个阶段链接到程序中。第一步,在编译器件,链接器确认程序所需要的标示(包括变量和函数等)包含在程序中,或者是动态链接库的一部分。在这里,动态链接库中的目标文件并没有插入到可执行文件中。第二部,当程序运行的时候,系统的动态加载器(dynamic loader)检查哪些动态链接库需要连接到程序,从而将这些库文件载入内存。除了可以减少内存的开销,动态链接库还是有缺陷的,如果我们重新编译库文件,再次运行程序,我们会发现库文件已经存在与内存中,也就是之前的旧库文件。
- cc -fPIC -c util_file.c
- cc -fPIC -c util_net.c
- cc -fPIC -c util_math.c
- cc -shared libutil.so util_file.o util_net.o util_math.o
- cc main.o -L. -lutil -o prog
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/lee/program/build_lib/shared_lib/