Boost Debug和Release Libraries是一样的吗?

时间:2013-06-19 20:33:08

标签: c++ boost

我的项目使用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版本构建时,它构建使用发布库。

2 个答案:

答案 0 :(得分:6)

  

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

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

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

您的编译器可能不会直接抱怨任何事情,但在运行时可能会出现几个与C ++运行时相关的问题。例如,请参阅此帖子:Mixing debug and release library/binary - bad practice?

答案 1 :(得分:5)

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库,将包含该文件。