静态链接库
1) 先将.c文件编译成.o文件 例:gcc –c add.c
2) 用ar命令生成静态库 例:ar –rc libadd.a add.o
3) 注意:静态库命令规则为 lib+名字.a
4) 注意使用该静态文件时,在编译时,要通过-I和-L指定对应的头文件和库文件的路径
动态链接库
1) 使用命令 gcc –fPIC –shared –o libadd.so add.c将源文件编译成动态链接库
2) 使用该动态文件时,在编译时,把该文件位置加在命令后面,如 gcc –o test test.c –ldl ./libadd.so;或将libadd.so复制到/usr/lib中,然后执行gcc –o test test.c –ldl libadd.so
或gcc -o test test.c -ladd ;-l 用于指定程序要链接的库,-l加库名即可,-l会自动识别库文件,优先链接动态库,如-lusb,实际上链接的是libusb.a或者libusb.so;一般在/lib /usr/lib /usr/local/lib 三个目录中查找
在这里说明一下库名和库文件名,库文件名为库文件在库中的真实名字,比如libadd.so;而对应的库名就是"add",要链接该库文件,只需要添加编译参数-ladd即可
3) 多个库文件链接的问题:依赖其他库的文件一定要放到被依赖库的前面
4) C++代码中链接C语言的库,在链接C库的C++文件中,把与C语言库相关的头文件包含添加一个extern “C”声明即可
5) 使用ldd命令可以查看程序依赖的动态库,比如ldd test
-l -L -I三个编译参数
1) -l 用于指定程序要链接的库,-l加文件名即可;一般在/lib /usr/lib /usr/local/lib 三个目录中查找
2) -L 用于指定动态库文件的位置,可以用相对路径
3) -I 用于指定头文件的位置,可以用相对路径
加载动态库与静态库在编译时参数没有区别,优先加载动态库,可以使用-static强制使用静态库