静态库在编译链接是就把库里头的代码提取出来放到可执行文件中,程序的执行不在依赖库。
动态库在编译链接时只记录要用的名字在哪个库文件中,运行时才从库文件中查找这个名字(函数或着变量)并访问它。
之间的区别:生成可执行文件大小、可执行文件执行速度、库生效方式
(1)静态库 libxxx.a
1)生成静态库
写的C语言程序不应该有main函数
gcc -c xxx1.c
gcc -c xxx2.c
写的头函数xxx.h中存放函数的声明和全局变量的声明(extent int a之类的)
ar -r libxxx.a xxx1.o xxx2.o
2)使用库
写C语言程序usexxx.c,包含xxx.h头文件,那么在程序中可以调用库中的函数或者全局变量。
方法一:gcc -c usexxx.c; gcc usexxx.o libxxx.a
方法二:gcc -c usexxx.c; gcc usexxx.o lxxx -L. (其中lxxx表示lib库libxxx.a文件,xxx表示库名;-L.表示当前的目录下查找库文件libxxx.a)
方法三:先设置全局环境变量LIBRARY_PATH为库文件所在的目录,然后gcc -c usexxx.c; gcc usexxx.o lxxx
3)查看静态库
ar -t libxxx.a //查看静态库中链接的文件
nm libxxx.a //查看静态库中链接文集及其中的函数
(2)动态库 libxxx.so
1)生成动态库
写的C语言程序不应该有main函数
gcc -c -fpic xxx1.c xxx2.c;
gcc -shared -o libxxx.so xxx1.o xxx2.o;
2)使用动态库
编译时:
写C语言程序usexxx.c
方式一:gcc -c usexxx.c; gcc usexxx.o lxxx -L.
方式二:先设置全局环境变量LIBRARY_PATH为库文件所在的目录,然后gcc -c usexxx.c; gcc usexxx.o lxxx
运行时:
方式一:把库文件放在系统标准库目录,/urs/lib或/lib目录中,就可以运行可执行文件了。
方法二:gcc -c usexxx.c; gcc usexxx.o lxxx -L. (其中lxxx表示lib库libxxx.a文件,xxx表示库名;-L.表示当前的目录下查找库文件libxxx.a)
方式三:先设置全局环境变量LD_LIBRARY_PATH为动态库文件所在的目录,然后运行可执行文件。