2012-03-06 116 views
3

我正在嘗試在Windows VS命令提示符下創建一個可執行文件和一些關聯的dll。該項目帶有一個scons文件,因此我只需在VS Cmd提示符中鍵入scons。Visual Studio命令編譯器強制64位編譯

可執行文件正在「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

VS Express不會執行64位構建,因此可以解釋爲什麼您的同事構建的是32位。在PC上的VS命令提示符下鍵入'cl'。第一行輸出應該以'80x86'或'for x64'結尾。 – arx 2012-03-06 17:35:38

+0

它說32位爲80x86 – Constantin 2012-03-06 17:54:47

+0

然後我不知道! – arx 2012-03-06 18:41:27

回答

6

Scons通常會根據它可以找到的東西來確定使用什麼工具鏈(即編譯器)(如果沒有明確指定)。

A 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

作爲一種替代解決方案esskov的,可以強制SCons的使用環境的PATH變量,這將使使用你得到相同的編譯器,當你在命令提示符下(這可以得到正確的運行設置鍵入cl由Visual Studio提供的適當的命令提示符快捷鍵)。要做到這一點,傳播外部環境的PATH變量到您的SCons的施工環境,如:

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

this FAQ entrythis section of the documentation,並注意以下警告:通過傳播的外部環境變量

當然,進入您的 版本,您將面臨外部環境變化會影響構建的風險,可能是以意想不到的方式。