从scons脚本调用cl错误0xc000007b

时间:2018-02-17 12:46:29

标签: c++ scons

我正在尝试使用Windows下的scons + MSVC编译器编译一个简单的程序。程序源只是简单的“Hello world”。

#include <iostream>

using namespace std;

int main() {
  cout << "Hello World!\n";
  return 0;
}

SConstruct非常简单:

Program("hw.cc")

当我在源目录中运行scons时,我得到了

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
cl /Fohw.obj /c hw.cc /TP /nologo
scons: *** [hw.obj] Error 123
scons: building terminated because of errors.

在控制台和弹出消息中出现0xc000007b错误。

where命令的结果:

where cl
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\bin\Hostx86\x86\cl.exe
where scons
C:\Python35-32\Scripts\scons.bat

我不知道什么是错的。

UPD SCons debug output

UPD 2

Error window when I run scons

1 个答案:

答案 0 :(得分:0)

在对clscons进行了一些实验之后,我终于弄清楚了哪里出了问题以及如何解决。

首先,cl应该可以从命令行使用。如果在控制台中输入命令cl后出现诸如command not found之类的错误,则应将cl.exe的路径添加到PATH系统变量。就我而言

PATH=<rubbish>;C:\Microsoft\VC\Tools\MSVC\14.14.26428\bin\Hostx86\x86;

此后,您应该设置变量INCLUDELIB来告诉编译器和链接器在哪里可以找到包含文件和库。这部分有点棘手,因为令我惊讶的是,cl在没有Windows Kits 10的情况下不会编译任何东西(无论它是什么)。因此,您应该相应地指定其包含和库。就我而言

INCLUDE=C:\Microsoft\VC\Tools\MSVC\14.14.26428\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt
LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17134.0\ucrt\x86;C:\Microsoft\VC\Tools\MSVC\14.14.26428\lib\x86;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17134.0\um\x86

正确设置这些变量后,hw.cc应该可以正常编译。

也许,这也应该为scons做些技巧,但是要确保百分之一百正确地工作,SConstruct应该修改为类似的内容

import os

env = Environment(ENV = os.environ)
flags = ["/EHsc"] # Flags are completely optional
env.Program("hw.cc", CXXFLAGS=flags)

通过所有这些步骤,所有内容都可以正常编译。