Compiler construction 编译器或汇编程序如何准确地将方法名转换为动态链接的地址

Compiler construction 编译器或汇编程序如何准确地将方法名转换为动态链接的地址,compiler-construction,vm-implementation,Compiler Construction,Vm Implementation,我写自己的编程语言只是为了好玩。目前我有一个基于堆栈的虚拟机、一个中间语言/汇编语言和一个高级编译器。所以不管怎样,一切都正常,但我需要动态链接已编译的代码库。问题是我的汇编程序需要知道外部库中各个方法的地址。一个C++编译器或java编译器是如何处理这个问题的?p> 对于静态链接的可执行文件,链接器负责将函数调用与实际地址进行匹配。一个对象文件将包含指向其他地方函数的符号引用(表示名称,而不是地址),链接器将在链接时将其与其他对象文件或库中的符号定义相匹配。使用此方法需要将本机机器代码生成到链

我写自己的编程语言只是为了好玩。目前我有一个基于堆栈的虚拟机、一个中间语言/汇编语言和一个高级编译器。所以不管怎样,一切都正常,但我需要动态链接已编译的代码库。问题是我的汇编程序需要知道外部库中各个方法的地址。一个C++编译器或java编译器是如何处理这个问题的?p> 对于静态链接的可执行文件,链接器负责将函数调用与实际地址进行匹配。一个对象文件将包含指向其他地方函数的符号引用(表示名称,而不是地址),链接器将在链接时将其与其他对象文件或库中的符号定义相匹配。使用此方法需要将本机机器代码生成到链接器能够理解的对象文件中

另一个可能更适合VM情况的选项是使用动态链接,程序在运行时获取链接函数的地址。具体方法取决于平台;在Windows上,您将使用
LoadLibrary
GetProcAddress
,而在Unix风格的平台上,您将使用
dlopen
dlsym