静态库
编译(链接)时把静态库中相关代码复制到可执行文件中,程序中已包含代码,运行时不再需要静态库
占用更多磁盘和内存空间,但程序运行时无需加载库,运行速度快
升级时,程序需要重新编译链接
创建静态库步骤:
1. 编写库文件代码,编译为.o 目标文件。
2.ar 命令 创建 libxxxx.a 文件
ar -rsv libxxxx.a xxxx.o
注意:
1 静态库名字要以lib开头,后缀名为.a
2 没有main函数的.c 文件不能生成可执行文件。
链接静态库:
gcc -o 目标文件 源码.c -L路径 -lxxxx
-L 表示库所在的路径
-l 后面跟库的名称
动态库
编译(链接)时仅记录用到哪个共享库中的哪个符号,不复制共享库中相关代码
程序不包含库中代码,尺寸小
多个程序可共享同一个库
程序运行时需加载库
库升级方便,无需重新编译
使用广泛
1.生成位置无关代码的目标文件
gcc -c -fPIC xxx.c xxxx.c ....
2.生成动态库
gcc -shared -o libxxxx.so xxx.o xxx.o ....
3.编译可执行文件
gcc -o 目标文件 源码.c -L路径 -lxxxx
含义:可执行文件所使用的动态库找不到
解决办法:
找到动态库,添加到/usr/lib里面
或者使用export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的动态库目录
添加在~/.bashrc 文件里面
使用source ~/.bashrc 生效。