连接器如何知道哪些符号应在运行时解析?

14
链接器如何知道哪些符号应在运行时解析? 我特别关注共享对象文件携带的信息,指导链接器在运行时解决符号的问题。 动态符号解析在运行时如何工作,即可执行文件将如何查找符号,在定义多个具有相同名称的符号的情况下将找到哪一个?
如果该文件仅被静态链接,但随后作为共享库的一部分在运行时动态链接,会发生什么? 可执行文件将使用哪个符号? 换句话说,是否可以通过将这些符号链接到共享库中来覆盖可执行文件中的符号?
所涉及的平台是SUN OS。

每个运行时都是不同的。你必须更具体地说明平台。 - Martin York
3个回答

4

你比我先做到了。我在我的答案中引用了同一篇文章。给你点赞,因为你更快了。 - M. Tibbits
我实际上将这篇文章作为C++编程入门者的示例,效果非常好。 - Vaibhav
如果文件仅静态链接,但在运行时作为共享库的一部分动态链接,会发生什么?可执行文件将使用哪个符号?换句话说,通过将这些符号链接到共享库中,是否可以覆盖可执行文件中的符号? - Leonid
该库仅用于解析程序所有对象文件中尚未解析的符号。因此,我认为静态链接将覆盖其作用。 - Vaibhav

3

0

如果一个文件是静态链接的,那么就没有运行时分辨率可言。如果一个共享对象动态或静态地链接到同一库,那么链接到该库的版本只会影响在库中执行的代码。如果您链接到两个不兼容的相同库的不同版本,并来回移动数据,这可能会导致问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接