Linux下共享库的创建和使用

共享库与静态库的区别在于,共享库只是在调用模块中嵌入调用代码的在库的相对位置的地址,当执行程序时,共享库会和程序一起加载到内存中,当执行到调用共享库中代码的指令时跳转到共享库中执行,执行完毕后在跳转回来。
相比于静态库占用空间小,方便更新(共享库发生变化后,程序不需要再次编译),但相比于静态库执行效率略低。
共享库以.so结尾,Linux下需要以lib开头
下面将以libmath.so来说明如何创建和使用共享库。

1、创建共享库

编译出位置无关目标文件(也就是在编译时加上-fpic):
	gcc -c -fpic x1.c x2.c-> x1.o x2.o
链接生成共享库:
	gcc -shared x1.o x2.o -o libmath.so

2、调用共享库

可以直接调用共享库:需要调用者要和共享库库在同一路径下
	gcc main.c libmath.so
设置环境变量:
	1.打开 vim ~/.bashrc 文件
   	2.在文件末尾添加一行
    		export LIBRARY_PATH=$LIBRARY_PATH:库文件的路径(如果需要删除环境变量,需要在~/.bashrc中删除环境变量后,关掉终端,重新启动终端才能生效)
   	3.重新加载配置文件 source ~/.bashrc
   	4.编译时要指定库名
    		gcc main.c -lmath(-l是在编译时加库,math是libmath.so去掉lib和.so)
设置编译参数:-L共享库的路径
	gcc main.c -L共享库的路径 -lmath 

3、运行

在使用共享库时,调用者只是记录了被代码在库的位置,因此在执行时需要共享库同时被加载。操作系统会根据LD_LIBRARY_PATH环境变量的设置来加载共享库。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值