5

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

4

2 回答 2

6

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

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

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

您的编译器可能不会直接抱怨任何事情,但在运行时可能会出现一些与 C++ 运行时相关的问题。例如,请参阅这篇文章:混合调试和发布库/二进制文件 - 不好的做法?

于 2013-06-19T20:47:12.037 回答
5

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

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

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

上面的第一个是库的发布版本,而-gd在几秒钟内表示调试版本,请参阅此页面以了解使用的命名约定。

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

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

于 2013-06-19T20:53:30.507 回答