我在 Visual Studio 2012 中有一个 dll 项目,它是用 /MT(静态多线程运行时库)编译的。还链接了第三方静态库,也是用/MT(库A)编译的,目前没有问题。
问题来自另一个静态库(库 B),不幸的是,它是用 /MD 编译的。在我的 dll 中,我需要链接两者,并且它们中的任何一个都没有替代品(而且我无法使用不同的选项重新编译它们)。我能够成功地将所有内容链接在一起,但现在我遇到了内存分配和删除问题 - 有时它无法删除分配的对象,有时会发生另一个奇怪的错误。我相信这是由我的 dll 的不同部分使用的混合内存管理函数引起的 - 当调用 new 时,会在库 B 中创建对象,但是当调用 delete 时,它会尝试使用不同的函数集释放内存 - 但我可能是错的。
所以我的问题是,这真的是由混合内存管理功能引起的吗?如果是这样,有没有办法让这项工作一起完成?
我想到的唯一解决方案是将库 B 包装在另一个用 /MD 编译的 dll 中,然后从原始 dll 使用它,以确保使用不同的内存管理功能。我不确定,如果这会有所帮助,我想避免它。