文章目录
一、库
1. 查看依赖的库
ldd
2. 静态库
gcc -o xx xx -static
- gcc默认动态链接
静态库是将.o文件打包成一个文件
libmymath.a:add.o
ar -rc $@ $^
%.o:%.c
gcc -c $<
.PHONY:clean
clean:
rm -rf add.o libmymath.a
.PHONY:output
output:
mkdir output
cp -rf add.h output
cp -rf libmymath.a output
- 将打包好的放在一个目录里
- 查看打包哪些文件
ar -tv xx.a
- 如何使用?
gcc 编译的文件 -I需要头文件的目录 -L静态库的目录 -l静态库名称(去掉前缀,去掉后缀的名字)
gcc test.c -I./output -L./output -lmymath
3. 动态库
动态库可移植性差,体积小,如果库丢失,程序跑不了
- shared: 表示生成共享库格式
- fPIC:产生位置无关码(position independent code)
libmymath.so:add.o
gcc -shared -o $@ $^
add.o:add.c
gcc -fPIC -c -o $@ $^
.PHONY:clean
clean:
rm -f add.o libmymath.so
.PHONY:output
output:
mkdir output
cp add.h output
cp libmymath.so output
这里的动态库除了像静态库一样指明文件路径,以外,还要将其文件的环境变量添加到系统里,才能链接起来,而静态库是直接复制到文件里不需要找地址
gcc test.c -I./output -L./output -lmymath
export LD_LIBRARY_PATH=/home/rinne/class-practice/dynamic/output
4. 添加路径到系统
在这个目录下touch一个.conf文件,再把目录复制进去
cd /etc/ld.so.conf.d/