gpt4 book ai didi

c++ - 链接 Visual Studio 2008 Express '/Mtd' 设置时 Boost 崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:02 24 4
gpt4 key购买 nike

长见识

将我的新 boost 构建与 Visual Studio (/Mtd) 链接会导致 boost 在进入主函数之前抛出“bad_alloc”异常。

详情

我使用 Getting Started 中的说明构建了 boost 库指示。设置先决条件后,我使用了以下构建命令:

bjam -j8 --build-dir="C:\Development\Boost\boost-build" --build-type=complete msvc stage

上面的命令似乎构建了调试/发布和共享/静态构建的所有组合。

然后我创建了一个空的 Visual Studio 项目并在主文件中添加了以下代码:

#include <boost/thread.hpp>

int main()
{
return 0;
}

我还将代码生成设置更改为多线程调试 (/MTd)。

此时我还没有在我的项目中配置任何库路径。因此构建以以下链接器错误结束:

LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc90-mt-sgd-1_43.lib'

好的,我在我的 boost 构建中找到了这个文件,并将其复制到“$(SolutionDir)3rdParty\Boost_1_43_0\libs”,我将其添加到附加库目录。下一个错误如下:

LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc90-mt-sgd-1_43.lib'

好的,我也在我的boost构建目录中找到了这个文件,并将它复制到我的库路径中。

此后项目构建成功,但在进入 main 函数之前,在 boost 代码中抛出一个“bad_alloc”异常。

这里好像是库不兼容。有谁知道到底出了什么问题,以及如何解决?

更新

James McNellis提到这可能是我尝试过“program_options”的线程库特有的东西,这个不会引起任何问题(虽然主体仍然是空的)。

使用 boost“信号”库的简单示例应用程序也可以正常工作。所以确实是线程库导致了一些问题。

版本

我目前使用的是 Boost v1.43.0,我会看看能否用 v1.42 重现该问题。

过境点

我想提及的一个细节是我使用的是精简版的 Boost。我使用以下 bcp 创建了一个子集效用:

mkdir ./output
bcp bind function lexical_cast noncopyable optional program_options smart_ptr signals signals2 thread ./output

虽然这可能不会导致“bad_alloc”...

boost 1.42

我刚刚使用 BoostPro Installe 安装了 Boost 1.42河快速测试表明它可以正常工作。奇怪...

最佳答案

我的 解决方案 解决方法如下:

  • 使用 BoostPro Installer 安装 boost .它将 Boost 安装在“C:\Program Files”目录中。
  • 使用(包含的)bcp 实用程序创建 boost 存储库的精简拷贝。有关示例,请参阅我的原始帖子。
  • 将生成的 header 添加到我的项目文件夹
  • 还将任何需要的库复制到项目文件夹。
  • 根据需要更新 Visual Studio 项目包含和链接器路径。
  • 测试它。
  • 将其全部提交给 SVN。
  • 瞧,我知道有我的电池代码存储库:)

实际上,我最初的问题仍然没有答案,我仍然不知道为什么我对 Boost 1.43 的尝试失败了。这可能是一些配置问题。但是,这是一个令人满意的解决方法。

顺便说一句,我恢复到 Boost 1.42 的原因仅仅是因为 BoostPro 安装程序还不支持 1.43。

关于c++ - 链接 Visual Studio 2008 Express '/Mtd' 设置时 Boost 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com