gcc elf linux,Linux,GNU GCC,ld,版本脚本和ELF二进制格式-如何工作?

这不能完全回答您的问题,但是...

首先,ELF是Linux使用的规范,用于可执行文件(程序),共享库以及目标文件,它们是编译软件时发现的中间文件。目标文件以.o结尾,共享库以.so结尾,后跟零或多个数字,中间用句点分隔,并且可执行文件通常没有任何扩展名。

通常有三种形式来命名共享库,第一种形式仅以.so结尾。例如,一个名为readline的库存储在一个名为libreadline.so的文件中,并且通常位于/ lib,/ usr / lib或/ usr / local / lib中。使用-lreadline等选项编译软件时,将找到该文件。-l告诉编译器链接到以下库。因为库会不时更改,所以它可能已过时,因此库嵌入了一个称为SONAME的东西。readline的SONAME看起来像libreadline.so.2的第二个主要版本的libreadline。可能还有许多次版本的readline是兼容的,不需要重新编译软件。次版本的readline可能名为libreadline.so.2.14。通常为libreadline。因此,在本例中,这只是指向readline最新主版本libreadline.so.2的符号链接。libreadline.so.2还是指向libreadline.so.2.14的符号链接,该链接实际上是正在使用的文件。

库的SONAME嵌入在库文件本身内部。文件libreadline.so.2.14内的某个地方是字符串libreadline.so.2。编译程序并与readline链接时,它将查找文件libreadline.so并读取其中嵌入的SONAME。稍后,当程序实际执行时,它将加载libreadline.so.2,而不仅仅是libreadline.so,因为那是第一次链接时读取的SONAME。这允许系统安装多个不兼容的readline版本,并且每个程序将加载与其链接的相应主版本。另外,在将readline升级到2.17时,我可以将libreadline.so.2.17与现有库一起安装,然后将符号链接libreadline.so.2从libreadline.so.2.13移到libreadline.so.2.17,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值