.so文件可以静态链接到可执行文件吗?

时间:2014-11-04 13:43:19

标签: linker elf

由于目标文件(ET_REL,* .o)必须包含节,而动态库(ET_DYN,*。so)同时具有段和节,因此* so文件可以静态链接,即使它是针对动态链接的?

1 个答案:

答案 0 :(得分:1)

  

动态库(ET_DYN,*。so)有段和段

动态库通常有部分,但仅仅因为它们没有被剥离。有很多的动态库都有任何部分(只有必需的段才能使库工作)。

  

* so文件是否可以静态链接,即使它是针对动态链接的?

没有。大多数UNIX链接器认为a.outfoo.so最终链接产品,没有任何进一步修改的规定。

foo.so纳入a.out理论上是可行的,但在实践中却相当困难。

考虑foo.so定义和导出函数foobar以及foo调用bar的情况。假设可以将foo.so链接到a.out,其bar的定义不同。

在这种情况下会发生什么?多重定义错误? foobar内拨打foo.sofoobar内拨打a.out?别的什么?所有上述替代方案都需要链接器变得比现在复杂得多,并且它已经足够复杂了。