我正在尝试在Windows VS命令提示符中构建可执行文件和一些相关的dll。该项目附带一个scons文件,因此我只需在VS Cmd提示符中键入scons。
可执行文件正在“x86”VS Cmd提示符中构建。但是,运行时,可执行文件不是32位(使用任务管理器确认。)我的同事使用scons文件在他的64位计算机上构建相同的项目,并且他的可执行文件在我的计算机上是32位。 (再次与任务经理确认)
dll是由32位JVM加载的,因为它们是64位,所以它们会抛出错误。我的同事不会这样做。
我们无法弄清楚为什么我的计算机在“x86”VS环境中强制进行64位构建。有没有人有任何建议?
P.S。 - 我有MS VS 2010,他有MS VS 2010 Express。
P.S.S。 - 我有64位python,因此我的scons也是64位。然而,我的同事也是如此。
答案 0 :(得分:6)
Scons通常会根据安装的内容确定要使用的工具链(即编译器)(如果没有明确指定)。
Visual Studio 2010 Express 只能构建32位二进制文件 - 即使在64位Windows上 - 这就是Scons的功能。使用32位和64位编译器的Visual Studio 2010“非表达式”,Scons可能会在64位Windows上进行64位构建。
要指定Scons项目的32位或64位版本,可以分别将TARGET_ARCH
设置为“x86”或“x86_64”。另见Scons Construction Variables。
答案 1 :(得分:1)
作为esskov的替代解决方案,您可以强制SCons使用您的环境的PATH
变量,这将使它使用在命令提示符下键入cl
时获得的相同编译器(可以通过运行Visual Studio提供的相应命令提示符快捷方式来正确设置。为此,请将外部环境的PATH变量传播到SCons构造环境中,例如:
import os
env = Environment(ENV = {'PATH' : os.environ['PATH']})
请参阅this FAQ entry或this section of the documentation,并注意以下警告:
当然,通过将外部环境变量传播到您的 建立,你冒着外部变化的风险 环境可能会以非预期的方式影响构建。