[boost] [build] Building library with vc++ 64-bit does not find vcvarsall.bat

128 views
Skip to first unread message

Edward Diener via Boost

unread,
Oct 13, 2017, 4:17:31 PM10/13/17
to bo...@lists.boost.org, Edward Diener
If I build any library with any version vc++ 64-bit compiler, by using
address-model=64, the vcvarsall.bat is looked for at, for example with
msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio
14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to
basic compilation failures. The path for vcvarsall.bat for msvc-14.0 is
C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat
instead. All versions of vc++ follow this path structure for vcvarsall.bat

Building with any version of vc++ 32-bit, by not specifying the
address-model, works correctly.


_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

James E. King, III via Boost

unread,
Oct 13, 2017, 4:35:03 PM10/13/17
to bo...@lists.boost.org, James E. King, III
On Fri, Oct 13, 2017 at 4:11 PM, Edward Diener via Boost <
bo...@lists.boost.org> wrote:

> If I build any library with any version vc++ 64-bit compiler, by using
> address-model=64, the vcvarsall.bat is looked for at, for example with
> msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio
> 14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to basic
> compilation failures. The path for vcvarsall.bat for msvc-14.0 is
> C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat
> instead. All versions of vc++ follow this path structure for vcvarsall.bat
>
> Building with any version of vc++ 32-bit, by not specifying the
> address-model, works correctly.
>

I do not see this behavior on my system, using a stock cmd.exe (not running
from a Visual Studio command line prompt) using the command:

c:\boost\libs\format\test>rmdir /s /q c:\boost\bin.v2\libs
c:\boost\libs\format\test>..\..\..\b2 toolset=msvc-14.0
address-model=32,64 variant=debug,release -q -j5

The resulting test binaries were correctly 32-bit and 64-bit.
If I do not specify address-model on the command line, I get a 32-bit
executable.
I find it quite odd that 32-bit would be the default here.
In the summary output after launching b2 when building, 64-bit is not
displayed as a line item either, only 32-bit is. But on linux 32-bit and
64-bit line items are shown in the summary.

If I do the same build with msvc-14.1 as the toolset, the default output is
also 32-bit.
It looks like there is some technical debt that needs to be addressed
here.
Shouldn't default builds on Visual Studio 2015, 2017 be 64-bit if not
specified?

- Jim

Olaf van der Spek via Boost

unread,
Oct 13, 2017, 4:37:41 PM10/13/17
to bo...@lists.boost.org, Olaf van der Spek
On Fri, Oct 13, 2017 at 10:34 PM, James E. King, III via Boost
<bo...@lists.boost.org> wrote:
> If I do the same build with msvc-14.1 as the toolset, the default output is
> also 32-bit.
> It looks like there is some technical debt that needs to be addressed
> here.
> Shouldn't default builds on Visual Studio 2015, 2017 be 64-bit if not
> specified?

Why should it be?


--
Olaf

Edward Diener via Boost

unread,
Oct 13, 2017, 4:45:47 PM10/13/17
to bo...@lists.boost.org, Edward Diener
On 10/13/2017 4:34 PM, James E. King, III via Boost wrote:
> On Fri, Oct 13, 2017 at 4:11 PM, Edward Diener via Boost <
> bo...@lists.boost.org> wrote:
>
>> If I build any library with any version vc++ 64-bit compiler, by using
>> address-model=64, the vcvarsall.bat is looked for at, for example with
>> msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio
>> 14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to basic
>> compilation failures. The path for vcvarsall.bat for msvc-14.0 is
>> C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat
>> instead. All versions of vc++ follow this path structure for vcvarsall.bat
>>
>> Building with any version of vc++ 32-bit, by not specifying the
>> address-model, works correctly.
>>
>
> I do not see this behavior on my system, using a stock cmd.exe (not running
> from a Visual Studio command line prompt) using the command:
>
> c:\boost\libs\format\test>rmdir /s /q c:\boost\bin.v2\libs
> c:\boost\libs\format\test>..\..\..\b2 toolset=msvc-14.0
> address-model=32,64 variant=debug,release -q -j5

Please try with just address-model=64. Why b2 tries to invoke
vcvarsall.bat from the wrong directory when I specify address-model=64
is the problem.

The default is 32-bits if no address model is specified. Whether or not
that should be so is another side issue.

Edward Diener via Boost

unread,
Oct 13, 2017, 4:52:50 PM10/13/17
to bo...@lists.boost.org, Edward Diener
On 10/13/2017 4:11 PM, Edward Diener via Boost wrote:
> If I build any library with any version vc++ 64-bit compiler, by using
> address-model=64, the vcvarsall.bat is looked for at, for example with
> msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio
> 14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to
> basic compilation failures. The path for vcvarsall.bat for msvc-14.0 is
> C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat
> instead. All versions of vc++ follow this path structure for vcvarsall.bat
>
> Building with any version of vc++ 32-bit, by not specifying the
> address-model, works correctly.

After rebuilding b2 everything is working correctly.
Reply all
Reply to author
Forward
0 new messages