Ok, I "figured out" how to get round this.
Basically, what I thought was happening was happening. Despite specifying a 64bit build and those libraries getting the name appropriate to a 64bit build, they were being built using the 32bit tool-chain.
To anyone from Boost who happens to see this - this is a REALLY bad experience and should be fixed
To get it to build the libraries correctly I had to run a .bat
script hidden away in the MSVC program files to set the environment to 64bit before the usual boost procedure.
There are a variety of these scripts for different purposes as detailed here, although infuriatingly it doesn't specify where to find them.
After hunting around for them I found the file I needed vcvarsx86_amd64.bat
(for complicated reasons I'm using an old version of MSVC which only comes in a 32bit flavor but can cross-compile 64bit code).
For me this was found in
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat
Note: for any of this to work this all has to be done inside a developer command prompt which for me was located at
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts
Once in the that command prompt the proper library files were then built by typing
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat
bootstrap vc12
b2 address-model=64
Then it linked as expected.
Disclaimer: Unnecessary opinion - feel free to edit this away...
Coming from *nix environments, all of this seems terrible. Boost is essential to c++ development, but just getting it to build with MSVC is so incredibly contrived, opaque, and just... broken. Almost like it is designed to make it difficult. How do you put up with it?