静态库制作
将要制作库的源文件编译成可执行的.o文件
gcc -c 只编译不链接
-o 指定文件名称
gcc -c xxx.c -o xxx.o
然后制作静态库
ar rcs libname.a xx0.o xx1.o
ar rcs 制作工具, 固定的
静态库必须以lib开头.a结尾,
然后静态库的使用
gcc main.c ./lib/libname.o -o a.out -I ./inc
注意-I 指定头文件路径, 头文件可以包含库函数中的所有函数名称,
这样只需要在源文件里面包含头文件,这样就可以调用函数.
动态库制作:
首先将制作源文件的位置无关码
gcc -c xxx.c -o add.o -fPIC
然后制作动态库
gcc -shared -o lib库名.so xx0.o xx1.o
gcc - shared 是制作动态库的工具
动态库命名规则:
lib开头, .so结尾
动态库使用
gcc main.c -o a.out -l 库名 -L ./lib
将main.c编译成a.tou可执行文件
-l 指定库名 , 库名, 即去掉lib开头, 且不用带.so
-L 指定库存放的路径.
然后执行文件
./a.out 但是这样会报错, 因为动态链接器找不到库文件
首先要有两个概念:
链接器: 工作链接阶段, 工作时需要-l 和-L 也就是 gcc main.c -o a.out -l 库名 -L ./lib
在这一步骤需要告诉链接器的动态库名称以及动态库路径
动态链接器: 工作在程序运行阶段, 工作时需要提供动态库所在的目录文位置
LD_LIBRARY_PATH 这个是动态链接器的一个环境变量.
export LD_LIBRARY_PATH = ./lib
因此在程序执行前需要导出这个环境变量.
可以在 ./bashrc 里面进行添加这个环境变量, 这样不用每次重启系统都要手动导出一遍. 因为./bashrc程序启动的时候都会运行,添加咱们的导出环境变量指令之后, 顺便也帮我们自动导出.
关于动态链接器补充, 其实我们的C库就存在于系统之中, 因此我们也可以将我们的动态库放入到系统自带的库函数中
/lib 路径, 不过这种方法不推荐, 不要影响系统的文件
命令
ldd a.out
还有ldd命令 可以查看当前程序执行之后所需要的动态库的路径状态,如果路径为空, 那么就需要进行包含
还有配置文件法,
将库存在的路径, pwd查看
然后添加到
1)/etc/ld.so.conf 文件里面去
然后 sudo ldcconfig -v 使配置文件生效