共享库的相关知识

共享库:链接时仅记录用到哪个共享库中的哪个标号(函数),不复制共享库中的代码到可执行文件中。

共享库特点:程序不包含库中的代码,尺寸小。多个程序可以共享同一个库。程序运行时需要加载库。库升级方便,无需重新编译程序。

共享库的创建:

第一步:编译生成目标文件

使用命令  gcc -c -fPIC filename1.c filename2.c -Wall // -fPIC表示位置无关代码

具体操作入下:

comlib1.c

#include<stdio.h>

void prt()
{
	printf("I love China\n");
	return;
}

comlib2.c

#include<stdio.h>

void prt2()
{
	printf("I love China,too!\n");
	return;
}

编译生成目标文件:

第二步: 创建共享库common

使用命令 gcc -shared -o libcommon.so.1 filename1.o  filename2.o //lib .so 为固定格式 1代表版本号。

具体操作如下:

 第三步:为共享库创建链接文件

使用命令 ln -s libcommon.so.1 libcommon.so

第四步:编译主函数文件,并链接上libcommon.so

使用命令 gcc -o test.c -L. -lcommon  

此命令和静态库中的一样,寻找库的时候也是先找common.so找不到就找common.a

test.c

#include<stdio.h>

void prt();     //声明库中的接口
void prt2();

int main()
{
	prt();
	prt2();
	return 0;
}

 

 注意!!!!

此时如果直接执行文件./test 会报错,系统找不到共享库,会报错。

需要修改加载库的环境变量,命令入下:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

ps:系统找不到共享库的解决办法还有如下两种:

1、直接将库拷贝到/lib 和 /usr/lib 目录下 //一般不太推荐,这两地方都是存放系统自带的库。

2、增加配置文件 /etc/ld.so.conf.d/*.conf 然后ldconfig刷新。

comlib.conf里面的内容是共享库的路径,如笔者的为/home/.../.../..../creatcommonlib

总结:

共享库的制作比静态库要麻烦,主要是在编译的时候静态库是直接复制代码到可执行文件处,而共享库则是仅记录用到哪个共享库中的函数,不复制共享库中的相关代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值