构建 DLL 时;我应该链接到什么类型的 CRT?

2023-12-21

在窗户中;有 2 个选项可链接到 CRT:

  1. 多线程、静态链接
  2. 多线程、动态链接

有人可以阐明这里的最佳实践是什么吗?我应该“静态”链接到 CRT 还是进行动态链接?

如果我进行动态链接,并且编写一个使用我的 DLL + 另一个第 3 方 DLL(正在对 CRT 进行静态链接)的程序,这是否有问题?


当您在应用程序中使用 DLL 时,这是一件大事。这是very重要的是 EXE 和 DLL 使用相同的内存分配器。如果您从需要由调用者释放的 DLL 函数返回指针或 C++ 对象(如 std::string)。要获得相同的分配器,所有模块必须使用相同的 CRT 实例。只有使用 /MD 进行编译以选择 CRT 的 DLL 版本时才能得到该结果。And它们必须都使用相同版本的 CRT。无论如何,使用 /MT 都会导致很难诊断内存泄漏,如果幸运的话,会导致访问冲突。

使用 /MT 可以更轻松地部署应用程序,因为您不必安装运行时 DLL。正如所暗示的,只有当您只需部署 EXE 时,这才是安全的。或者当您非常仔细地控制 DLL 的公共接口时。例如,自动化兼容的 COM 服务器可以链接到 CRT 的静态版本。自动化对于交换指针和管理内存有严格的规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建 DLL 时;我应该链接到什么类型的 CRT? 的相关文章

随机推荐