改变运行时库选项对运行时链接的影响

时间:2016-08-21 21:08:41

标签: c++ visual-studio visual-c++ dll

Microsoft Visual Studio 2015 (v14.0)我有一个包含3个项目的解决方案。

其中两个项目是DLL,另一个是可执行文件 可执行文件在运行时加载DLL并调用它们的函数并交换参数;使用Window的LoadLibraryGetProcAddress API。

Release模式下,当我将Runtime Library项目设置为Multi-threaded DLL时,一切正常。对于Multi-threaded Debug DLL模式,这是Debug

如果我为Multi-threaded更改为ReleaseMulti-threaded Debug更改为Debug,我会收到调试断言错误或内存访问冲突错误以及其他类型的错误。 (当我更改它时,我会为解决方案中的所有项目更改它。)

我需要使用Multi-threaded选项,以便可执行文件在目标计算机上不需要C ++运行时库。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是因为使用/MT分隔实体的运行时(即DLL和可执行文件),每个实体都有自己的运行时,因此它们自己的堆,尝试在一个中分配内存并在另一个中释放它将最终错误。因为其他模块忘记了分配的内存 另一方面,使用/MD所有模块共享相同的运行时,并且运行时知道在一个模块中分配的内存,它将能够在另一个模块中释放它。因为一个运行时实例管理整个内存。

修改 感谢 dxiv 评论。