【问题标题】:cl error 0xc000007b when invoked from scons script从 scons 脚本调用时出现 cl 错误 0xc000007b
【发布时间】:2018-06-23 22:44:23
【问题描述】:

我正在尝试在 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 命令的 Aslo 结果:

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

【问题讨论】:

  • 在控制台中运行cl /Fohw.obj /c hw.cc /TP /nologo,看看是否有任何错误。
  • 编译器开始抱怨找不到包含文件。
  • 什么版本的scons?你有安装vswhere吗?如果有,它在哪里?
  • @bdbaddog,我有 SCons v3.0.0。 vswhere 在 C:\Program Files (x86)\Microsoft Visual Studio\Installer,但不在 PATH 中。
  • 在你的 windows shell 中试试这个:设置 SCONS_MSCOMMON_DEBUG=,然后将你的日志文件的内容粘贴到这里并发布到这里..

标签: c++ scons


【解决方案1】:

在对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)

通过所有这些步骤,一切都应该可以正常编译了。

【讨论】:

  • 这实际上是一个 hack,而不是一个正确的解决方案。如果 SCons 没有找到您安装的 Visual Studio,则说明存在错误。
  • 如果您使用“开发人员命令提示符”(在 Visual Studio 下的开始菜单中找到),它将在该 shell 环境中设置所有这些路径(以及更多路径)。仍然不是让 scons 找到工具的方法,但比手动输入这些路径更简单..
  • @bdbaddog,实际上,在 scons 常见问题解答网站 scons.org/… 上建议使用此解决方案。我使用 MS Build 工具,而不是 Studio。有一些脚本应该自动设置这些变量,但似乎对我不起作用。
  • 您从哪个答案中得到答案? (因为我是FAQ的维护者和项目联席经理)这不是scons找到工具的正确方法..
  • SCons 应该找到安装并在内部设置适当的 shell 变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
相关资源
最近更新 更多