Командный компилятор Visual Studio Форсирует 64-битную компиляцию - PullRequest
3 голосов
/ 06 марта 2012

Я пытаюсь создать исполняемый файл и некоторые связанные библиотеки в командной строке Windows VS. Проект поставляется с файлом scons, поэтому я просто набираю scons в командной строке VS Cmd.

Исполняемый файл создается внутри "x86" VS Cmd Prompt. Однако при запуске исполняемый файл не является 32-разрядным (подтверждается диспетчером задач.) Мой коллега создает точно такой же проект на своей 64-разрядной машине, используя файл scons, а его исполняемый файл является 32-разрядным на моем компьютере. (еще раз подтверждено диспетчером задач)

DLL загружаются 32-битной JVM и выдают ошибку, поскольку они 64-битные. Мои сотрудники не делают.

Мы не можем понять, почему мой компьютер вызывает 64-битную сборку в среде VS x86. У кого-нибудь есть предложения?

P.S. - У меня MS VS 2010, а у него MS VS 2010 Express.

P.S.S. - У меня есть 64-битный Python, и поэтому мои scons также 64-битные. Однако мой коллега тоже.

Ответы [ 2 ]

6 голосов
/ 12 февраля 2013

Scons обычно определяют, какую цепочку инструментов (т.е. компилятор) использовать (если вы не укажете это явно), основываясь на том, что он может найти установленным.

Visual Studio 2010 Express может создавать только 32-разрядные двоичные файлы - даже в 64-разрядной Windows - так будет делать Scons.В Visual Studio 2010 «не экспресс», в котором доступны как 32-разрядные, так и 64-разрядные компиляторы, Scons, вероятно, будет использовать 64-разрядную сборку в 64-разрядной Windows.

Чтобы указать 32- или 64-битная сборка проекта Scons, вы можете установить TARGET_ARCH в 'x86' или 'x86_64' соответственно.См. Также Scons Строительные переменные .

1 голос
/ 17 марта 2014

В качестве альтернативы решению esskov, вы можете заставить SCons использовать переменную PATH вашей среды, которая заставит его использовать тот же компилятор, который вы получаете, когда вы набираете cl в командной строке (который может быть установлен правильно).запустив соответствующий ярлык командной строки, предоставляемый Visual Studio).Для этого распространите переменную PATH внешней среды в среду конструирования SCons, например:

import os
env = Environment(ENV = {'PATH' : os.environ['PATH']})

См. эту запись FAQ или этот раздел документации ,и обратите внимание на следующее предупреждение:

Конечно, распространяя переменные внешней среды в вашей сборке, вы рискуете, что изменение внешней среды повлияет на сборку, возможно непреднамеренным образом.

...