2

我编写自己的编程语言只是为了好玩。目前我有一个基于堆叠的虚拟机、一种中间语言/汇编语言和一个高级编译器。所以无论如何,一切正常,但我需要动态链接编译的代码库。问题是我的汇编器需要知道外部库中各个方法的地址。C++ 编译器或 java 编译器究竟是如何处理这个问题的?

4

1 回答 1

1

对于静态链接的可执行文件,链接器负责将函数调用与实际地址匹配。一个目标文件将包含对其他地方函数的符号引用(意味着名称,而不是地址),并且链接器将在链接时将其与其他目标文件或库中的符号定义匹配。使用此方法需要您将本机机器代码生成到链接器可以理解的目标文件中。

另一种可能更适合您的 VM 情况的选项是使用动态链接,您的程序在运行时获取链接函数的地址。执行此操作的确切方法取决于平台;在 Windows 上,您将使用LoadLibraryand GetProcAddress,而在 Unix 风格的平台上,您将使用dlopenand dlsym

于 2012-06-13T22:23:25.917 回答