【发布时间】:2021-01-15 22:45:58
【问题描述】:
我想我的问题很简单,在程序上使用动态链接(加载时或运行时)时我看不到整个画面,因为我想知道链接器在编译时看到未解析的引用时的行为并执行找不到它们的任何定义(因为它们在 dll 文件中),但无论如何程序编译得很好,即使存在将在运行时解析的引用。
假设链接器需要在编译时解析每个引用才能正常运行(就像静态链接一样),所以当 dll 文件工作时,以某种方式,链接器说可以离开这些引用在运行时未解决(我想我们作为程序员告诉链接器用代码来思考,就像说一些函数在 dll 文件上,就像我们说编译器在使用前向声明时某些函数存在于某处) .
有人可以向我解释一下,当链接器在加载时和运行时动态链接中看到对 dll 文件的外部引用时,链接器在编译时的行为方式是什么?策略?
尤其是在 C++ 上处理 dll 文件时,我可以理解哪些代码片段告诉链接器这样做。
旁注:
我已经在 microsoft docs 和其他网站上进行了在线研究,但我完全不了解所有内容,所以我转向了这里。
【问题讨论】:
-
exe 文件的加载方式并不像人们想象的那么简单。也许这篇文章可以帮助澄清:Loading a DLL from memory » ~magog/public
-
来自 Remy Lebeau 的 This answer 很好地总结了这个过程,恕我直言。
标签: c++ dll dynamic-linking compile-time