微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C++ 程序上使用加载时或运行时动态链接时,如何在编译时解析引用?

如何解决在 C++ 程序上使用加载时或运行时动态链接时,如何在编译时解析引用?

我想我的问题很简单,在程序上使用动态链接(加载时或运行时)时,我看不到整个画面,因为我想知道链接器在编译时看到未解析的引用时的行为并执行找不到它们的任何定义(因为它们在 dll 文件中),但无论如何程序编译良好,即使存在将在运行时解析的引用。

假设链接器需要在编译时解析每个引用才能正常(就像静态链接发生的那样),所以在 dll 文件中工作时,以某种方式,链接器说可以离开那些未解析的引用在运行时之后无法解析(我猜我们作为程序员告诉链接器像代码一样思考,比如说某些函数在 dll 文件上,因为我们说编译器在使用前向声明时某些函数存在于某处) .

有人可以向我解释一下当链接器看到加载时和运行时动态链接都存在对 dll 文件的外部引用时链接器在编译时的行为的分步过程是什么策略?

特别是在 C++ 上处理 dll 文件时,我可以理解哪些代码片段告诉链接器表现得像那样。

旁注:

我已经在 microsoft docs 和其他网站上进行了在线研究,但我根本不了解所有内容,所以我转向这里。

解决方法

链接器在编译时看到未解析的引用时的行为

它不仅会看到“未解析的引用” - 如果引用确实未解析,您将收到错误消息。它需要访问一个动态库(或者,在 Windows 上,一个所谓的导入库)来声明这些符号并让链接器知道从哪些库中获取它们。然后,链接器生成可执行文件,其中引用了提供这些符号的动态库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。