有人可以描述C和C++上下文中的符号表吗?

最佳答案

符号表在这里有两种常见且相关的含义。

首先,目标文件中有符号表。通常,C或C++编译器将单个源文件编译为扩展名为.obj或.o的目标文件。它包含可执行代码和数据的集合,链接器可以将这些可执行代码和数据处理为工作的应用程序或共享库。目标文件中有一个称为符号表的数据结构,该结构将目标文件中的不同项目映射到链接程序可以理解的名称。如果从代码中调用函数,则编译器不会将例程的最终地址放入目标文件中。取而代之的是,它将占位符值放入代码中,并添加一条注释,告知链接器从其正在处理的所有目标文件中的各种符号表中查找引用,并将最终位置粘贴在该位置。

其次,共享库或DLL中也有符号表。这是由链接程序产生的,用于命名库用户可见的所有功能和数据项。这允许系统进行运行时链接,将对这些名称的开放引用解析为库在内存中的加载位置。

如果您想了解更多信息,我建议您使用John Levine的出色著作“链接器和加载器”。 link text

10-07 14:24