在调试中构建应用程序,发布带有依赖性问题的CRT

时间:2012-06-17 20:55:52

标签: c++ boost crt

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

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

2 个答案:

答案 0 :(得分:2)

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

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

这对解决任何依赖性问题都有很大帮助,特别是在这种意外混合发布和调试版本的情况下,它帮助了我很多。

答案 1 :(得分:1)

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