TLDR
将我的新boost build与Visual Studio(/mtd)链接会导致boost在进入主函数之前引发“bad”alloc异常。
细节
我使用来自
Getting Started
指令。设置前提条件后,我使用了以下生成命令:
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 build中找到这个文件,并将其复制到“$(solutiondir)3rdparty\boost\u 1\u 43\u 0\libs”,然后将其添加到
其他库目录
. 下一个错误如下:
LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc90-mt-sgd-1_43.lib'
好的,我也在我的boost build目录中找到这个文件,并将其复制到我的库路径。
在此之后,项目成功地构建,但是在进入主函数之前,boost代码中会抛出一个“bad ou alloc”异常。
这里似乎有一个库不兼容。有人知道到底出了什么问题,怎么解决吗?
更新
自从
James McNellis
提到这可能是我尝试过的线程库的特定内容“程序选项”,而这个不会导致任何问题(但是主体仍然是空的)。
使用Boost“信号”库的简单示例应用程序也可以正常工作。因此,正是线程库导致了一些问题。
版本
我现在使用的是Boost v1.43.0,我会看看是否能用v1.42重现这个问题。
BCP
我想提到的一个细节是,我使用的是精简版的Boost。我用以下方法创建了一个子集
bcp
效用:
mkdir ./output
bcp bind function lexical_cast noncopyable optional program_options smart_ptr signals signals2 thread ./output
这可能不会导致“坏分配”…
增压1.42
我刚刚安装了Boost 1.42
BoostPro Installe
R.一个快速的测试显示它可以像这样工作。奇怪…