Boost安装错误:未配置任何工具集

时间:2015-04-27 15:33:58

标签: boost

我已经尝试了5天以上,我不知道如何让它发挥作用。我成功安装了一次boost,然后我的计算机重新成像了,现在它还没有发生。我有Windows 7企业版和64位操作系统。

我从这里sourceforge下载了提升

将其解压缩到程序文件中。

然后我转到VS 2013 Native Command提示符。更改目录以提升工具/构建

Ran bootstrap.bat

I then ran ./b2 address-model=64 

但它没有给我上次编译器和链接器的目录。

I then ran ./b2 --prefix=C:\ProgramFiles\boost_1_58_0

但是没有任何反应。我收到以下错误:

Warning: No Toolsets were configured.
Warning: Configuring default toolset ""msvc"
Warning: If the default is wrong, your build may not work correctly
warning: Use the "toolset=xxxxx" option to overrride out guess
warning: for more configuration please consult

我不知道为什么这是我第一次这样做的原因以及为什么现在还没有工作。有人可以帮帮我吗。我对Unix一无所知,但我需要安装它,所以我可以使用这些库。

1 个答案:

答案 0 :(得分:1)

我使用mingw(64位)和msvc 2013 pro编译boost。我从来没有在生命中使用过vs命令提示符来构建msvc的提升。以下是我在两个工具链上构建64位二进制文​​件的命令。

首先进入boost文件夹,然后双击bootstrap.bat。这应该运行并构建bjam / b2。没有什么特别需要,并且无关紧要构建它的编译器。

然后在正常的命令提示符下运行:

bjam.exe -a -j8 --toolset=msvc --layout=system optimization=speed link=shared threading=multi address-model=64 --stagedir=stage\MSVC-X64 release stage

其中-a强制重建所有,-j8意味着构建使用8个核心(根据你的处理器能力调整这个),工具集很明显,布局意味着如何构造输出文件的命名,地址模型是显而易见,stagedir是输出构建的二进制文件(相对路径或绝对路径)的地方,而发布阶段是构建系统的类型。 See more here

同样的事情,但使用64位mingw。

bjam.exe -j8 --toolset=gcc --layout=system optimization=speed link=shared threading=multi address-model=64 --stagedir=stage\x64 release stage

你甚至可以继续构建额外的库,第二次调整你的参数。例如,在使用上面的命令构建核心库之后,我运行以下命令来构建zlib和gzip支持。

bjam.exe -a -j8 --toolset=msvc --layout=system optimization=speed link=shared threading=multi address-model=64 --stagedir=stage\MSVC-X64 --with-iostreams -s BZIP2_SOURCE=C:\dev\libraries\cpp\bzip2-1.0.6 -s ZLIB_SOURCE=C:\dev\libraries\cpp\zlib-1.2.8 release stage

无论如何,这只是一个例子。我链接到构建系统的完整文档。尝试使用这些命令构建不在vs命令提示符下。如果您仍有问题,请发布具体错误。

关于MSVC的说明
因此,msvc编译器+ boost支持一种链接,它会自动包含它知道需要的其他库。我相信通过在头文件中使用#pragma指令来实现此功能。例如,你可以使用boost :: asio配置它需要boost :: system(对于错误代码等)。即使您没有将boost :: system库显式添加到链接器选项,msvc也会“弄清楚”它需要这个库并自动尝试链接它。

现在出现了一个问题,因为你正在使用layout = system。这些库简单地命名为“boost_”+ lib名称,如“boost_system.dll”。但是,除非您指定预处理器定义,否则此自动链接将尝试链接到名称“boost_system_msvc_mt_1_58.lib”。这不准确,因为我不记得确切的名字,但你明白了。你特意告诉boost用系统布局(boost_thread,boost_system)等命名你的库,而不是默认值,包括boost版本,如果是多线程的“MT”,编译器版本,以及名称中的许多其他东西。所以这就是为什么自动链接功能会寻找这样一个疯狂奇怪的名字而失败的原因。要解决此问题,请在visual studio中的C ++设置的预处理器部分添加“BOOST_AUTO_LINK_NOMANGLE”。

More on that here。请注意,此处的答案为您提供了一个不同的预处理器定义来解决此问题。我相信我最终使用BOOST_AUTO_LINK_NOMANGLE(最终为我工作),因为ALL_DYN_LINK宏被设计为一个“内部”定义,可以增强控件并自行设置。不确定,因为我有这个问题,但是我提供的定义似乎解决了相同的根本问题。