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

strip对动态库文件和静态库文件的不同效果

发布网友 发布时间:2022-05-12 23:13

我来回答

1个回答

热心网友 时间:2023-10-29 20:56

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
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 1斤排骨炖干天麻,需要放多少干天麻。 如何泡发天麻 干天麻炖汤要提前泡发吗? 干天麻炖汤要提前泡发吗 干天麻怎么处理 天麻太干太硬怎么办? 天麻怎么泡发才快 干天麻用冷水泡发还是热水 武汉离汉通道暂时关闭是哪一天 角瓜鸡蛋饺子怎么做 美的空调1.5匹挂机调式开关在哪里 角瓜鸡蛋饺子馅怎么调窍门 MP4怎么下载电子书我要详细步骤 口腔溃疡和白塞氏病的区别? 口腔溃疡中的变态反应是啥 这是什么动漫或者gal game?? 《2008银行理财产品评价报告》 蘑菇街冉冉是谁 德国的表现主义有哪两个中心? 德国表现主义美术社团青骑士都是什么人组成的 艺术理念是什么? 如何用外部ram,gcc,s文件 帮忙看一下这个c语言程序哪不对 提示说是sqrt找不到标识符 运行环境vs2005 arm-linux-gcc的交叉编译问题。测试helloworld程序出现Segment fault 怎么用液晶电视玩游戏 用TDM-GCC编译Lua源码,如何修改官方Makefile把所有源码编译成一个exe文件,而不生成依赖的dll文件 怎么用液晶电视玩游戏?,就是那种体感的 液晶电视怎么玩3D游戏 如何用液晶电视玩电脑游戏,同时,电脑操作不受影响 液晶电视 电视游戏怎么玩 去渍粉对人身体有害吗 液晶电视玩电脑游戏 交叉编译libnpg库 ./configure CC=mipsisa32-elf-gcc --host=mipsisa32-linux 求大神给予帮助 洗小白鞋用什么去渍粉有效?大家来说说 液晶电视玩游戏的问题 涤普特去渍粉中毒怎么办 液晶电视玩游戏方便吗?接口都有吗? 去渍粉能带上火车吗|? 去渍粉气味对身体有害吗 win7开机一直配置windows update 学健康管理师学费多少zzzz