由于目标文件(ET_REL,* .o)必须包含节,而动态库(ET_DYN,*。so)同时具有段和节,因此* so文件可以静态链接,即使它是针对动态链接的?
答案 0 :(得分:1)
动态库(ET_DYN,*。so)有段和段
动态库通常有部分,但仅仅因为它们没有被剥离。有很多不的动态库都有任何部分(只有必需的段才能使库工作)。
* so文件是否可以静态链接,即使它是针对动态链接的?
没有。大多数UNIX链接器认为a.out
和foo.so
是最终链接产品,没有任何进一步修改的规定。
将foo.so
纳入a.out
理论上是可行的,但在实践中却相当困难。
考虑foo.so
定义和导出函数foo
和bar
以及foo
调用bar
的情况。假设可以将foo.so
链接到a.out
,其bar
的定义不同。
在这种情况下会发生什么?多重定义错误? foo
在bar
内拨打foo.so
? foo
在bar
内拨打a.out
?别的什么?所有上述替代方案都需要链接器变得比现在复杂得多,并且它已经足够复杂了。