5

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

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

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

如果我做一个动态链接,并且我编写了一个使用我的 DLL + 另一个 3rd 方 DLL 的程序(它正在做一个到 CRT 的静态链接),这是一个问题吗?

4

1 回答 1

5

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

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

于 2011-03-10T17:18:24.377 回答