1

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

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

4

2 回答 2

2

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

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

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

于 2012-06-19T07:54:44.283 回答
1

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

于 2012-06-17T21:04:18.703 回答