首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析一个符号意味着什么?

解析一个符号意味着什么?
EN

Stack Overflow用户
提问于 2014-07-27 04:19:57
回答 3查看 1.7K关注 0票数 1

因此,ld-linux.so的手册页提到了解析符号,但并没有解释这个概念。

http://man7.org/linux/man-pages/man8/ld.so.8.html

我认为这个短语也是在ld和linux之外使用的。

解析一个符号意味着什么?我见过很多这句话,但我从未见过一个定义。

导致这个问题的原因是,我确信,解析变量的符号是否会保证变量的构造,或者解析符号只会注意到变量的存在。这个问题与此有关:

Force Eager Initialization of Static Variables in Dynamically Linked Libs

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-27 04:28:00

它意味着将“未定义”符号的用法(例如,一段代码在共享库中调用函数的点)与实际符号(例如,共享库文件中的实际函数的代码)的位置匹配,根据需要加载库。

术语既用于编译时与静态库的链接,也用于运行时的动态库。

在C++中,如果库尚未加载,解析共享库中变量的符号应该会构造该库中的所有内容。

票数 1
EN

Stack Overflow用户

发布于 2014-07-27 04:28:13

较大的程序由单独编译的模块组成。您可以决定将数据库内容放在一个模块中,在另一个模块中打印,将用户界面放在另一个模块中。第一步将每个模块编译成一个所谓的对象文件。一种中间的步骤。

最后一步是将所有这些对象“链接”在一起,链接器可能会得出这样的结论:一个对象中的符号试图访问另一个对象中的值或函数,却发现它不存在。在这种情况下,链接器无法“解析”引用。

解析的实际‘动作’是计算链接器必须放在一个模块中的地址,以便它能够正确地访问另一个模块中的某个内容。

注意,这通常是在编译语言(如C、C++等)和链接时出现的问题。它出现在最后一个实例中,在所有模块都被转换为对象之后。

票数 0
EN

Stack Overflow用户

发布于 2014-07-27 04:30:18

声明的函数(例如,在标头中),但未实现的函数(编译器不知道该函数的功能)将在lib中得到处理。这就是“解析符号”的意思。“符号”是由库导出的函数的名称。当在代码或导入的库中找不到函数的实现时,链接器将“无法解析符号”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24977879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档