从 scons 脚本调用时出现 cl 错误 0xc000007b
cl error 0xc000007b when invoked from scons script
我正在尝试在 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 Studio17\Community\VC\Tools\MSVC.12.25827\bin\Hostx86\x86\cl.exe
where scons
C:\Python35-32\Scripts\scons.bat
我不知道哪里出了问题。
UPD 2
经过 cl
和 scons
的一些实验后,我终于弄清楚出了什么问题以及如何解决它。
首先,cl
应该可以从命令行获得。如果在控制台中输入命令 cl
后出现类似 command not found
的错误,您应该将 cl.exe
的路径添加到 PATH
系统变量中。就我而言
PATH=<rubbish>;C:\Microsoft\VC\Tools\MSVC.14.26428\bin\Hostx86\x86;
在此之后您应该设置变量INCLUDE
和LIB
来告诉编译器和链接器在哪里可以找到包含文件和库。这部分有点棘手,因为令我惊讶的是,如果没有 Windows Kits 10(无论它是什么),cl
不会编译任何东西。因此,您应该相应地指定其包含和库。就我而言
INCLUDE=C:\Microsoft\VC\Tools\MSVC.14.26428\include;C:\Program Files (x86)\Windows Kits\Include.0.17134.0\ucrt
LIB=C:\Program Files (x86)\Windows Kits\Lib.0.17134.0\ucrt\x86;C:\Microsoft\VC\Tools\MSVC.14.26428\lib\x86;C:\Program Files (x86)\Windows Kits\Lib.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)
通过所有这些步骤,一切都应该可以正常编译。
我正在尝试在 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 Studio17\Community\VC\Tools\MSVC.12.25827\bin\Hostx86\x86\cl.exe
where scons
C:\Python35-32\Scripts\scons.bat
我不知道哪里出了问题。
UPD 2
经过 cl
和 scons
的一些实验后,我终于弄清楚出了什么问题以及如何解决它。
首先,cl
应该可以从命令行获得。如果在控制台中输入命令 cl
后出现类似 command not found
的错误,您应该将 cl.exe
的路径添加到 PATH
系统变量中。就我而言
PATH=<rubbish>;C:\Microsoft\VC\Tools\MSVC.14.26428\bin\Hostx86\x86;
在此之后您应该设置变量INCLUDE
和LIB
来告诉编译器和链接器在哪里可以找到包含文件和库。这部分有点棘手,因为令我惊讶的是,如果没有 Windows Kits 10(无论它是什么),cl
不会编译任何东西。因此,您应该相应地指定其包含和库。就我而言
INCLUDE=C:\Microsoft\VC\Tools\MSVC.14.26428\include;C:\Program Files (x86)\Windows Kits\Include.0.17134.0\ucrt
LIB=C:\Program Files (x86)\Windows Kits\Lib.0.17134.0\ucrt\x86;C:\Microsoft\VC\Tools\MSVC.14.26428\lib\x86;C:\Program Files (x86)\Windows Kits\Lib.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)
通过所有这些步骤,一切都应该可以正常编译。