Visual Studio 命令编译器强制进行 64 位编译

3
我正在尝试在Windows VS命令提示符中构建可执行文件和一些相关的dll。该项目带有一个scons文件,因此我只需在VS Cmd Prompt中键入scons。
可执行文件是在“x86”VS Cmd提示符中构建的。但是,当运行可执行文件时,它不是32位的(通过任务管理器进行确认)。我的同事在他的64位机器上使用scons文件构建完全相同的项目,并且他的可执行文件是32位的(再次通过任务管理器进行确认)。
这些dll被32位JVM加载,由于它们是64位的,因此会抛出错误。我的同事的dll没有这个问题。
我们无法弄清楚为什么我的计算机在“x86”VS环境中强制进行64位构建。请问有什么建议吗?
P.S. - 我有MS VS 2010,而他有MS VS 2010 Express。
P.S.S. - 我有64位的python,因此我的scons也是64位的。然而,我的同事也是如此。

VS Express不支持64位构建,这就解释了为什么你的同事构建是32位的。在你的PC上,在VS命令提示符下键入“cl”。输出的第一行应该以“for 80x86”或“for x64”结尾。 - arx
它表示80x86的32位。 - Constantin
我没有找到任何强制32位的CL标志,你知道有什么吗? - Constantin
2个回答

6

Scons通常根据已安装的内容来确定要使用什么工具链(即编译器)(如果您没有明确指定),

Visual Studio 2010 Express只能构建32位二进制文件 - 即使在64位Windows上也是如此,因此Scons会这样做。在Visual Studio 2010“非 Express”版本中,同时提供了32位和64位编译器,Scons可能会选择在64位Windows上进行64位构建。

要指定Scons项目的32位或64位构建,可以将TARGET_ARCH设置为'x86'或'x86_64'。另请参阅Scons构建变量


1
作为 esskov 的替代解决方案,您可以强制 SCons 使用您环境中的 PATH 变量,这将使其使用与在命令提示符下键入 cl 时相同的编译器(可以通过运行 Visual Studio 提供的适当命令提示符快捷方式来正确设置)。为此,请将外部环境的 PATH 变量传播到您的 SCons 构建环境中,例如:
import os
env = Environment(ENV = {'PATH' : os.environ['PATH']})

请查看此常见问题解答文档的此部分,并注意以下警告:

当然,通过将外部环境变量传播到您的构建中,您面临着这样的风险,即外部环境的更改可能会以意想不到的方式影响构建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接