解决一个符号是什么意思?

时间:2014-07-27 04:19:57

标签: c++ ld dynamic-linking

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

3 个答案:

答案 0 :(得分:0)

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

该术语用于在编译时链接静态库和在运行时链接动态库。

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

答案 1 :(得分:0)

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

最后一步是链接'将所有这些对象放在一起,并且可能发生链接器得出的结论:一个对象中的符号试图访问另一个对象中的值或函数并发现它不存在。在这种情况下,链接器无法解析'参考。

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

请注意,这通常是编译语言中出现的问题,如C,C ++等,以及链接时。在将所有模块转换为对象后,它出现在最后一个实例中。

答案 2 :(得分:0)

在libs中将处理声明的函数(例如在头文件中)但未实现的函数(编译器未知的函数)。这意味着"解决符号"。 "符号"是libs导出的函数的名称。链接器将无法解析符号"无论何时在代码或任何导入的lib中找不到函数的实现。