0
点赞
收藏
分享

微信扫一扫

【Linux】动静态库的形成

小贴贴纸happy 2022-05-04 阅读 52

文章目录


一、库



1. 查看依赖的库

ldd

image-20220502224805910

image-20220502225023102


2. 静态库

gcc -o xx xx -static

image-20220503133902183

  • 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

image-20220503162034548

  • 将打包好的放在一个目录里

image-20220503162904067

  • 查看打包哪些文件
ar -tv xx.a

  • 如何使用?
gcc 编译的文件 -I需要头文件的目录 -L静态库的目录 -l静态库名称(去掉前缀,去掉后缀的名字)
gcc test.c -I./output -L./output -lmymath

image-20220504145611610



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

image-20220504171841932

image-20220504171909872

image-20220504172157046


这里的动态库除了像静态库一样指明文件路径,以外,还要将其文件的环境变量添加到系统里,才能链接起来,而静态库是直接复制到文件里不需要找地址

gcc test.c -I./output -L./output -lmymath
export LD_LIBRARY_PATH=/home/rinne/class-practice/dynamic/output

image-20220504173918663


4. 添加路径到系统

在这个目录下touch一个.conf文件,再把目录复制进去

cd /etc/ld.so.conf.d/
举报

相关推荐

0 条评论