在Windows中;有两个链接到CRT的选项:
有人能说清楚这里的最佳做法是什么吗?我应该“静态”链接到CRT还是进行动态链接?
如果我做了一个动态链接,并且我编写了一个程序,它使用我的DLL +另一个第三方DLL(它正在执行到CRT的静态链接),这是一个问题吗?
答案 0 :(得分:4)
当您在应用程序中使用DLL时,这是一个大问题。 EXE和DLL使用相同的内存分配器是非常重要的。如果您从需要由调用者释放的DLL函数返回指针或C ++对象(如std :: string)。要获得相同的分配器,所有模块必须使用相同的CRT实例。只有使用/ MD编译才能选择CRT的DLL版本。 和他们都必须使用相同版本的CRT。无论如何使用/ MT会导致很难诊断内存泄漏,如果幸运的话,会导致访问冲突。
使用/ MT可以更轻松地部署应用程序,因为您不必安装运行时DLL。如暗示的那样,只有部署EXE才能安全。或者,当您非常小心地控制DLL的公共接口时。例如,自动兼容的COM服务器可以链接到CRT的静态版本。自动化有关于交换指针和管理内存的严格规则。