问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux静态库和共享库的区别

发布网友 发布时间:2022-04-19 13:22

我来回答

1个回答

热心网友 时间:2023-09-04 13:13

linux库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so
libhello.a
为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如:
libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。
ln
-s
libhello.so.1.0
libhello.so.1
ln
-s
libhello.so.1
libhello.so
动态库和静态库的区别:
当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记‘指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
两种库的编译产生方法:
第一步要把源代码编绎成目标代码。以下面的代码hello.c为例,生成hello库:
/*
hello.c
*/
#include
void
sayhello()
{
printf("hello,world\n");
}
用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等:
gcc
-c
hello.c
-o
hello.o
1.连接成静态库
连接成静态库使用ar命令,其实ar是archive的意思
$ar
cqs
libhello.a
hello.o
2.连接成动态库
生成动态库用gcc来完成,由于可能存在多个版本,因此通常指定版本号:
$gcc
-shared
-wl,-soname,libhello.so.1
-o
libhello.so.1.0
hello.o
另外再建立两个符号连接:
$ln
-s
libhello.so.1.0
libhello.so.1
$ln
-s
libhello.so.1
libhello.so
这样一个libhello的动态连接库就生成了。最重要的是传gcc
-shared
参数使其生成是动态库而不是普通执行程序。
-wl
表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有
soname名字的文件,%b
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...爱你你是我的罗密欧 , 我愿意变成你的朱丽叶' 谁知 有句歌词是“我爱你你是我的朱丽叶,我愿意变成你的梁山伯”是哪... 为什么打印出来的文档页码和原来的不一样 ...两台电脑用路由器上网一台是W7一台是XP如何实现两台电脑共享文件 win7怎么联另一台电脑win7怎么让网络和另一台电脑共享 w7的系统怎么共享电脑w7系统里面文件怎么共享另一台电脑 共享win7电脑w7系统里面文件怎么共享另一台电脑 翡翠有收藏价值吗,我们玩家如何去投资 价格一两万元的翡翠如何挑选 ppt怎么转换成视频?简单四步法,轻松搞定ppt微课录制 linux静态库怎么编译 Linux里面什么是静默安装? Linux怎么添加静态路由? Linux里面什么是静态变量? Linux里面什么是静默状态? linux系统中有哪些静 九阳豆浆机打豆浆需要多长时间 用九阳豆浆机做豆浆时,水和豆子的比例应该是多少? 榨豆浆一次要用装多少水呢 九阳豆浆机打豆浆要多长时间 豆浆机做豆浆用多长时间啊 豆浆机打豆浆多久打好 九阳豆浆机打一次豆浆一般要多长时间? 用豆浆机打一个人的豆浆要多少黄豆和水 打豆浆比例是多少 一般的豆浆机打豆浆多长时间啊? 九阳豆浆机打豆浆需要多长时间? 九阳 豆浆机打豆浆全过程需花费多长时间???? 一般的豆浆机打豆浆多长时间 豆浆机打豆浆需要多长时间 linux怎么静态编译 LINUX下的静态路由 Linux下的静态库和动态库 linux动态库和静态库的区别 linux终端静默打开软件 Linux中如何创建静态库和动态库 周庄古镇有什么值得推荐游览的地方和美食呢? 周庄古镇美食有哪些?景区内哪些东西值得吃? 周庄古镇的景点比较分散,有哪些值得游览的呢? 想去周庄旅游,大家有什么好的攻略推荐吗? 江苏昆山市的周庄古镇有什么岭南特色美景? 卡帝车控+官网 江南水乡最有名的为什么是周庄古镇? 卡帝车控+官网卡帝车控ID和密码怎么输入? 周庄古镇晚上几点免费开放 卡帝车控gsm离线 苏州十大古镇分别是哪里? 卡帝手机智能控车 手机控车 限制距离吗 卡帝车控绑定的手机不用了怎么充值? 昆山周庄古镇怎么样呀?好玩吗?门票是多少呀?