使用发布 CRT 在调试中构建应用程序,并在提升时存在依赖问题

Building application in debug with release CRT with dependency issues on boost

本文关键字:问题 依赖 存在 构建 CRT 调试 应用程序      更新时间:2023-10-16

我正在构建一个依赖于boost的应用程序。我的应用程序输出是最终由另一个客户端应用程序使用的库。我最近发现我正在使用/MDd 在调试模式下生成应用程序以进行代码生成(调试 CRT 库),并且即使在调试模式下,客户端应用程序也是针对发布 CRT 构建的。因此,这可能会导致一些内存堆损坏错误。为了确认这一点,我在发布模式下测试了所有内容,并且一切正常。

为了解决这个问题,我针对 CRT 版本库在调试模式下构建了我的应用程序......但是现在我的应用程序(在独立测试中)在运行时失败。我的理解是这是由于提升依赖性,并且提升调试可能是针对调试 CRT 库构建的?我查看了提升文档,但找不到我想要的确切内容......这是如何针对发布 CRT 重建提升(在调试模式下)?感谢任何帮助/想法/示例。谢谢你的时间!

除了@AlKepp的回答之外,我还建议看看Dependency Walker(http://dependencywalker.com/)。这是一个免费工具,可向您显示您的库或应用程序所依赖的库。通常,您应该确保仅显示Microsoft C/C++运行时 DLL 的发布版本或调试版本(例如 MSVCP90.DLL vs MSVCP90D.DLL )。

如果您的应用程序在运行时加载更多库(例如插件),请使用 Profile->Start Profiling依赖 Walker 运行应用程序。然后,它将向您显示实际加载或尝试在执行期间加载的所有库。

这对解决任何依赖项问题有很大帮助,尤其是在意外混合发布和调试版本的情况下,它对我有很大帮助。

我过去也有类似的问题。我通过仅使用启用了调试功能的发布版本来解决它。您可以更改默认发布配置以生成所有必需的调试信息并省略优化或其中一些优化,也可以创建默认发布配置的克隆,以让您同时拥有原始(即实际发布)和启用调试的发布配置。