【问题标题】:Are Boost Debug and Release Libraries the same?Boost Debug 和 Release 库是一样的吗?
【发布时间】:2013-06-19 20:33:07
【问题描述】:

我的项目使用 boost-win-1.47-32bit-vs2010 库。我目前正在调试模式下运行我的应用程序,它似乎运行良好。现在我计划在发布模式下构建它,我也成功地做到了。但是我担心的是我使用相同的 boost 库来做到这一点。我从未构建过引导库,所以我不知道我使用的引导库是用于调试模式还是发布模式。关于如何找出答案的任何建议。我正在使用的引导库是否有可能在发布和调试模式下运行,因为我在更改模式时没有收到任何错误?

更新:

例如,相关文件夹中的每个文件似乎有两个版本

libboost_thread-vc100-mt-1_47.lib

libboost_thread-vc100-mt-gd-1_47.lib

这是否意味着它同时包含调试库和发布库。因为除了 VS2010 中文件夹的路径之外,我没有在输入属性中明确指定任何内容。我认为我可能忽略了这样一个事实,即该文件夹包含 Release 和 debug 版本,当我更改构建选项以调试它使用 boost 调试库构建时,以及当我使用 release 选项构建时它使用发布库。

【问题讨论】:

  • 您通常应该能够通过库文件的名称来判断。如果我没记错的话,Boost 的调试版本通常以“gd”之类的结尾...
  • 刚刚更新了问题
  • 是的,mt 是你的发布版本,mt-gd 是调试版本。不要混合它们。

标签: c++ boost


【解决方案1】:

我使用的引导库是否可能在发布和调试模式下运行

不,不是真的。您将有一个调试和一个发布版本。你不应该混合这些。

libboost_thread-vc100-mt-1_47.lib 将是您的库的发布版本。您的应用程序的发布版本应与该版本相关联。对于调试版本,您可以链接到 libboost_thread-vc100-mt-gd-1_47.lib。

您的编译器可能不会直接抱怨任何事情,但在运行时可能会出现一些与 C++ 运行时相关的问题。例如看这篇文章:Mixing debug and release library/binary - bad practice?

【讨论】:

  • 您的编译器可能不会抱怨,但您的用户可能会抱怨,因为他们可能没有 Boost 将尝试加载的调试运行时/开发包。
  • @peachykeen 是的。这不是我第一次搞砸我的 CMake 只是想知道为什么它似乎不能在干净的系统上运行...... :)
【解决方案2】:

默认情况下,Boost 通常会同时构建调试库和发布库,并将它们都安装在库安装目录中。 (通常在 Windows 上为 c:\Boost\lib 或在 unix/linux 上为 /usr/local 等)。然而,这种行为是可以改变的,所以你应该检查一下。

如果您查看库,您应该会看到每个库的两个版本,例如:

libboost_unit_test_framework-vc110-mt-1_53.lib
libboost_unit_test_framework-vc110-mt-gd-1_53.lib

上面的第一个是库的发布版本,而秒中的-gd 表示调试版本,使用的命名约定见this page

现在,您必须确保链接到正确版本的库。如果您使用的是 Visual Studio,那么它将为您选择正确的库。对于其他工具集,您必须为每个构建配置明确选择要链接的正确库。

注意:Visual Studio 包含一个pragma option,用于指定目标文件应链接到的库。 Boost 通过 auto_link.hpp 头文件使用此选项,如果您使用具有要链接的库的 boost 库,则会包含该文件。

【讨论】:

  • 因为我用的是VS2010。你是说它会为我完成大部分工作,而且我明确不必对文件进行任何隔离
  • “如果您使用的是 Visual Studio,那么它将为您选择正确的库”是什么意思
  • @Bart 最后看到我的补充。
  • 哈,我不知道。 +1 感谢您提供信息。
  • 感谢您帮助澄清问题
猜你喜欢
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2013-03-21
  • 2015-10-18
相关资源
最近更新 更多