更改运行时库选项对运行时链接的影响
Effect of Changing Runtime Library Option on Runtime Linkage
在Microsoft Visual Studio 2015 (v14.0)
中,我有一个包含3个项目的解决方案。
其中两个是dll,另一个是可执行文件。
可执行文件在运行时加载dll,调用它们的函数并交换参数;使用windows的LoadLibrary
和GetProcAddress
api。
在Release
模式下,当我将项目的Runtime Library
设置为Multi-threaded DLL
时,一切工作正常。这是Debug
模式的Multi-threaded Debug DLL
。
如果我为Release
或Multi-threaded Debug
更改为Debug
的Multi-threaded
,我开始得到调试断言错误或内存访问冲突错误和其他类型的错误。(当我更改它时,我会为解决方案中的所有项目更改它。)
我需要使用Multi-threaded
选项,以便可执行文件在目标机器上不需要c++运行时库。如何解决这个问题?
这是因为使用/MT
将实体(即dll和可执行文件)的运行时分开,每个实体都有自己的运行时,因此有自己的堆,试图在一个中分配内存并在另一个中释放内存将以错误告终。因为其他模块对分配的内存无关。
另一方面,对于/MD
,所有模块共享相同的运行时,并且由于运行时知道在一个模块中分配的内存,因此它将能够在另一个模块中释放内存。因为一个运行时实例管理整个内存。
感谢dxiv注释
相关文章:
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 生成文件无法在运行时链接库
- 引用构造函数时链接失败
- 运行时链接到不在LD_LIBRARY_PATH上的动态库
- 模型依赖关系目标,在运行时链接
- 根据用户配置在运行时链接共享对象
- CG 运行时链接器错误与 cmake 项目 (g++)
- 如何在运行时链接期间从我的 DLL 调用函数
- 格鲁运行时/链接器错误
- 在安卓上与 SDL_Mixer 和 SMPEG2 的运行时链接错误
- NDK使用STL时发生运行时链接错误
- 如何通知调试器运行时链接的 DLL 文件的位置
- 将现有的C++dll与Windows Phone组件运行时链接
- 选择要在运行时链接的库
- Boost库构建-运行时链接和链接选项之间的差异
- 更改运行时库选项对运行时链接的影响
- 在运行时链接c++ .o文件
- 在运行时链接c++对象
- 共享库和可执行文件与 Linux 上的静态 C 运行时链接.它们中的每一个都有像Windows这样的独立堆吗?