Vertexwahn
Vertexwahn

Reputation: 8142

Building boost 1.65.0: vcvarsall.bat not found

I tried to build boost 1.65.0 using Visual Studio 2017 x64 and Windows 10.

This is how my power shell build script looks like:

. ".\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

To boil it down – it simple does:

  1. bootstrap.bat
  2. b2.exe --toolset=msvc-14.1 address-model=64 --build-type=complete stage –j 8

Execution bootstrap.bat seems to work. But b2 yields some errors – vcvarsall.bat not found:

enter image description here

Nevertheless, it seems that everything is build fine:

enter image description here

Is it safe to ignore those error messages? Can someone reproduce those errors?

Upvotes: 2

Views: 3134

Answers (1)

kenba
kenba

Reputation: 4539

To update (and correct!) my previous answers on building boost, here are my latest notes for building boost on Windows for both Visual Studio and MinGw.

Windows does not directly support boost, so you can download it and put it wherever you want.
The boost user guide recommends creating a BOOST_ROOTenvironment variable with the location of boost.

Building for Visual Studio

In a Visual Studio tools Command Prompt:

cd boost_1_xx_0
call bootstrap.bat

For 64 bit static libraries (recommended for 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

Note: the boost thread library must be built with dynamic linking see: https://studiofreya.com/2015/05/20/the-simplest-way-of-building-boost-1-58-for-32-bit-and-64-bit-architectures-with-visual-studio/

For 64 bit dynamic library (thread only):

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

If you have multiple versions of Visual Studio installed and want to build for a specific version then use:

  • 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

Note: when I built boost 1.65.0 for Visual Studio 2017 for 64 bit binaries, b2 output "building 32 bit: true", but it built 64 bit libraries...

Also note: whilst compiling a boost 1.65.0 include file in Visual Studio 2017 you may see the warning:

Unknown compiler version - please run the configure tests and report the results

This is because the latest version of Visual Studio 2017 defines _MSC_VER as 1911 whilst boost\config\compilier\visualc.hpp contains:

// 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

To remove the warning, change line 325 of visualc.hpp to:

#if (_MSC_VER > 1911)

Building for MinGw

Ensure that mingw or gcc is in the path, e.g.: 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

Note: for boost versions prior to 1.61 change bootstrap.bat gcc to bootstrap.bat mingw

Also note: 2>&1 | tee name.txt isn't necessary, but it's useful to keep a log...

Upvotes: 2

Related Questions