gpt4 book ai didi

c++ - 使用不同的 .dll 静态链接二进制文件(导出相同的符号)

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:31 26 4
gpt4 key购买 nike

(阅读评论后改写的问题)

如果我有一个应用程序或 .dll 静态动态链接到某些 .dll 通过导入库然后我将后者的 .dll 替换为不同的(版本的).dll 导出原始 .dll 的所有符号并可能添加一些新符号?

具体来说,能否保证这会奏效?

最佳答案

这通常有效,并且是在现场修复错误或安全漏洞的常用方法,无需重新编译客户端程序。成功的关键是ABI compatibility .

符号名存在于DLL文件中,加载DLL时根据符号名查找每个函数的地址。

可能会妨碍兼容性的特定问题:

  • 两个 DLL 版本必须具有相同的体系结构(32 位或 64 位)。
  • 两个 DLL 版本的参数和返回类型应该匹配。
  • 另外,每个函数调用的语义至少应该是等价的。如果 DLL 具有用于添加小部件的 add_widget 函数,但在新的 DLL 中它删除了小部件,则可能存在问题。
  • Calling conventions需要在新旧 DLL 之间进行匹配。
  • 如果新的 DLL 是使用不同的编译器或同一编译器的不同版本编译的,则未声明 extern "C" 的符号可能会中断,因为 name mangling .
  • 如果标准库类型跨 DLL 边界传递,则标准库需要是同一版本(并且客户端程序也需要使用该版本)。

关于c++ - 使用不同的 .dll 静态链接二进制文件(导出相同的符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49712158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com