构建 boost 1.65.0:找不到 vcvarsall.bat
Posted
技术标签:
【中文标题】构建 boost 1.65.0:找不到 vcvarsall.bat【英文标题】:Building boost 1.65.0: vcvarsall.bat not found 【发布时间】:2017-08-23 11:40:17 【问题描述】:我尝试使用 Visual Studio 2017 x64 和 Windows 10 构建 boost 1.65.0。
This 是我的 power shell 构建脚本的样子:
. ".\Invoke-CmdScript.ps1"
# We expect PowerShell Version 5
if(-Not $PSVersionTable.PSVersion.Major -eq 5)
Write-Host "Expecting PowerShell Version 5"
return
# Now download boost 1.65.0
Invoke-WebRequest http://dl.bintray.com/boostorg/release/1.65.0/source/boost_1_65_0.zip -OutFile C:\thirdparty\vs2017\x64\boost_1_65_0.zip
# Check file hash
$value = Get-FileHash C:\thirdparty\vs2017\x64\boost_1_65_0.zip -Algorithm SHA256
if($value.Hash -ne "f3f5c37be45eb6516c95cd147d8aa4abb9b52121fc3eccc1fc65c4af0cf48592")
Write-Host "boost archive seems to be corrupted"
return
# Extract file
$strFileName="$env:ProgramFiles\7-Zip\7z.exe"
If (Test-Path $strFileName)
# Use 7-zip
if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) throw "$env:ProgramFiles\7-Zip\7z.exe needed"
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
sz x C:\thirdparty\vs2017\x64\boost_1_65_0.zip -oC:\thirdparty\vs2017\x64
Else
# use slow Windows stuff
Expand-Archive C:\thirdparty\vs2017\x64\boost_1_65_0.zip -DestinationPath C:\thirdparty\vs2017\x64\boost_1_65_0
# Removed downloaded zip archive
Remove-Item C:\thirdparty\vs2017\x64\boost_1_65_0.zip
# Setup VS2017 x64 environment
Invoke-CmdScript -script "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" -parameters amd64
# Build
cd C:\thirdparty\vs2017\x64\boost_1_65_0
Invoke-CmdScript -script "bootstrap.bat"
$cpuInfo = Get-CimInstance -ClassName 'Win32_Processor' `
| Select-Object -Property 'DeviceID', 'Name', 'NumberOfCores', 'NumberOfLogicalProcessors';
Write-Host $cpuInfo.NumberOfLogicalProcessors
.\b2.exe --toolset=msvc-14.1 address-model=64 --build-type=complete stage -j $cpuInfo.NumberOfLogicalProcessors
归结为:很简单:
bootstrap.bat
b2.exe --toolset=msvc-14.1 address-model=64 --build-type=complete stage –j 8
执行 bootstrap.bat 似乎有效。但是 b2 会产生一些错误——找不到 vcvarsall.bat:
尽管如此,似乎一切都很好:
忽略这些错误消息是否安全? 有人可以重现这些错误吗?
【问题讨论】:
注意:b2
的正确工具集是 toolset=msvc-14.1
不是 toolset=msvc-15.0
。如果您被我的旧答案 here 误导,我很抱歉
好的,很好,解决了这个问题 - 你能从你的评论中回答,以便我接受你的回答吗?
我很高兴它对你有用 @Vertexwahn,我已经发布了 MSVC 和 MinGw 的完整答案,谢谢。
【参考方案1】:
要更新(和更正!)我之前关于构建提升的答案,这是我在 Windows 上构建 boost
的最新笔记,适用于 Visual Studio
和 MinGw
。
Windows 不直接支持 boost,所以你可以下载它并放在任何你想要的地方。
boost 用户指南建议创建一个带有 boost 位置的BOOST_ROOT
环境变量。
为 Visual Studio 构建
在 Visual Studio 工具命令提示符中:
cd boost_1_xx_0
call bootstrap.bat
对于 64 位静态库(推荐用于 Windows):
b2 -j8 toolset=msvc address-model=64 link=static threading=multi runtime-link=shared --build-type=complete stage
2>&1 | tee msvc_static_build.txt
注意:boost thread
库必须使用动态链接构建,请参阅:https://studiofreya.com/2015/05/20/the-simplest-way-of-building-boost-1-58-for-32-bit-and-64-bit-architectures-with-visual-studio/
对于 64 位动态库(仅限线程):
b2 -j8 toolset=msvc address-model=64 link=shared threading=multi runtime-link=shared --with-thread --build-type=minimal stage
2>&1 | tee msvc_thread_build.txt
如果您安装了多个版本的Visual Studio
并且想要为特定版本构建,请使用:
Visual Studio 2017
: toolset=msvc-14.1
Visual Studio 2015
: toolset=msvc-14.0
Visual Studio 2013
: toolset=msvc-12.0
Visual Studio 2012
: toolset=msvc-11.0
Visual Studio 2010
: toolset=msvc-10.0
注意:当我为
Visual Studio 2017
为 64 位二进制文件构建boost 1.65.0
时,b2
输出“building 32 bit: true”,但它构建了 64 位库...
另请注意:在 Visual Studio 2017
中编译 boost 1.65.0
包含文件时,您可能会看到警告:
未知的编译器版本 - 请运行配置测试并报告结果
这是因为Visual Studio 2017
的最新版本将_MSC_VER
定义为1911,而boost\config\compilier\visualc.hpp
包含:
// last known and checked version is 19.10.25017 (VC++ 2017):
#if (_MSC_VER > 1910)
# if defined(BOOST_ASSERT_CONFIG)
# error "Unknown compiler version - please run the configure tests and report the results"
# else
# pragma message("Unknown compiler version - please run the configure tests and report the results")
# endif
#endif
要删除警告,请将visualc.hpp
的第 325 行更改为:
#if (_MSC_VER > 1911)
为 MinGw 构建
确保mingw
或gcc
在路径中,例如:C:\Qt\Tools\mingw491_32\bin
cd boost_1_xx_0
call bootstrap.bat gcc
b2 toolset=gcc link=shared threading=multi --build-type=complete stage
2>&1 | tee mingw_build.txt
注意:对于 1.61 之前的 boost 版本,将
bootstrap.bat gcc
更改为bootstrap.bat mingw
另请注意:2>&1 | tee name.txt
不是必需的,但保留日志很有用...
【讨论】:
"output "building 32 bit: true", but it build 64 bit libraries..." - 你确定它没有将 32 位库命名为 64 位吗?这并不少见,参见例如***.com/a/69317280/85371 是的@sehe,我确定它们是 64 位库,因为我将它们构建为 64 位exe
s。以上是关于构建 boost 1.65.0:找不到 vcvarsall.bat的主要内容,如果未能解决你的问题,请参考以下文章
QT 和 Boost:找不到 -llibboost_filesystem
使用boost在eclipse中找不到libboost_system.so.1.43.0