致命错误 C1083:无法打开包含文件:“Windows.h”:和 scons

Posted

技术标签:

【中文标题】致命错误 C1083:无法打开包含文件:“Windows.h”:和 scons【英文标题】:fatal error C1083: Cannot open include file: 'Windows.h': and scons 【发布时间】:2010-09-17 16:24:46 【问题描述】:

今天是我正式接触 C++ 的第一天:P

我已经下载了 Visual C++ 2005 Express Edition 和 Microsoft Platform SDK for Windows Server 2003 SP1,因为我想接触开源 Enso Project。

所以,在安装了 scons 之后,我去控制台尝试使用 scons 编译它,但是我得到了这个错误:

C:\oreyes\apps\enso\enso-read-only\src\platform\win32\Include\WinSdk.h(64) : fatal error C1083: Cannot open include file: 'Windows.h': No such file or directory
scons: *** [src\platform\win32\InputManager\AsyncEventProcessorRegistry.obj] Error 2
scons: building terminated because of errors.

检查这些链接后:

VS ans PSDK

Include tiffi.h

Wndows.h

我已经设法像这样配置我的安装:

甚至运行这个脚本

我设法在 IDE 中编译了下面的文件。

// Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>


int _tmain(int argc, _TCHAR* argv[])

    return 0;

但我仍然在控制台中收到该异常。有人有scons经验吗?

编辑

实际上(我忘了告诉你这一点)我使用“Visual Studio 2005 命令提示符”链接启动了命令提示符。

我假设这将包括环境变量中的路径。好吧,在打印它们之后,我发现它没有:

 echo %INCLUDE%
 echo %LIB%
 echo %PATH% 

他们不存在,所以我创建了这个 .bat 文件:

set PATH=%PATH%;"C:\Program Files\Microsoft Platform SDK\Bin"
set INCLUDE=%INCLUDE%;"C:\ Program Files\Microsoft Platform SDK\Include"
set LIB=%LIB%;"C:\ Program Files\Microsoft Platform SDK\Lib"

不过,scons 似乎不接受 vars... :(

【问题讨论】:

【参考方案1】:

在使用命令行提示符使用 Visual C++ 2005 Express 编译 wxwidgets 时,这对我有用:

REM Fix Error error C1083 'windows.h'

(编译时使用 /useenv 选项。)

set PDSKWIN=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2

(换到右边。)

set INCLUDE=%PDSKWIN%\Include;%INCLUDE%

set LIB=%PDSKWIN%\Lib;%LIB%

然后我在编译的时候就使用了这一行。我相信只需将/useenv 添加到您的行中,一切都会正常工作:

vcbuild /useenv /nohtmllog /nologo name.proj (or any file to compile)

【讨论】:

【参考方案2】:

scons 自动执行此操作会很好。现在,我使用这个(从 SDK 命令提示符运行,不确定在 vsvars32.bat 之后运行是否有区别):

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

env['ENV']['TMP'] = os.environ['TMP']
env.AppendUnique(CPPPATH=os.environ['INCLUDE'].split(';'))
env.AppendUnique(LIBPATH=os.environ['LIB'].split(';'))

【讨论】:

【参考方案3】:

使用上述建议不适用于 scons:scons 不会导入用户环境(PATH 和其他变量)。根本问题是 scons 无法处理最新版本的 SDK/VS。

我是 scons 的偶尔贡献者,并且正在开发此功能 ATM。希望它很快会包含在 scons 中,但该功能比我最初预期的要可靠地实现要困难得多,部分原因是每个 sdk/编译器组合都是不同的(有时甚至 MS 都不正确,他们的一些 .bat 文件坏了),所以我不能给你约会。我希望它会包含在 1.2 中(大约一个月后发布)。

【讨论】:

:S 如何直接在scons构建过程中手动添加环境变量? 有两种方式。假设您在 python 变量 mssdk 中有 SDK 路径,然后您可以使用 env.Prepend(CPPPATH, [os.path.join(mssdk, "Include")]) 和 env.Prepend(LIBPATH, [os .path.join(mssdk, "libpath")]) 另一种方法是简单地将环境导入scons:env = Environment(ENV = os.environ)。然后,scons 将使用您在 shell 中所做的任何环境修改(Windows 上的 DOS shell)。 太好了,我做了第二个,现在出现了一个不同的错误,但不是 Windows.h 非常感谢!!【参考方案4】:

会有一个与此类似的批处理文件(用于 MSVC 2005),用于设置环境变量:

c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat

第 1 步:在 Express 安装文件夹中查找类似文件

第 2 步:使用这些目标详细信息和适当修改的路径在桌面上创建一个快捷方式:

cmd.exe /K "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"

第 3 步:通过此快捷方式打开 DOS 提示符

命令行构建现在应该可以在这个控制台窗口中运行了。

【讨论】:

【参考方案5】:

您需要设置包含文件路径(可能还有其他内容)。在命令行中,这通常使用 Visual Studio 安装的名为vsvars32.bat(或vcvars32.bat 以与VC6 兼容)的批处理文件来完成。

我不熟悉 scons,所以我不知道为该工具配置这些设置的最佳方法,但是对于标准 makefile,makefile 中通常有一行设置包含目录路径的宏变量和该宏在调用编译器的命令中用作命令行参数的一部分。

另一种可能是让 scons 进程调用 vsvars32.bat 或从已使用批处理文件配置的命令行运行 scons 脚本。

简而言之,您需要以某种方式将 vsvars32.bat 配置的内容放入 scons 配置中。

【讨论】:

我可以确认这是我们团队在 Windows 上使用 SCons 时通常使用的过程。 Andrew,您能否进一步解释一下如何在 scons 中包含 vcvars32?【参考方案6】:

您向我们展示了您如何配置 Visual Studio 以在 Visual Studio 中进行编译,但您没有向我们展示您尝试过的命令行环境。抱歉,我没有尝试过 Express 版本,所以我不知道他们是否会创建额外的开始菜单快捷方式,如 Pro 及以上版本。如果您打开一个已经设置了环境变量的合适的命令提示符,那么您可以在命令行上进行编译。否则,每次打开命令提示符时,您都必须自己设置变量或执行批处理脚本来设置它们。

【讨论】:

以上是关于致命错误 C1083:无法打开包含文件:“Windows.h”:和 scons的主要内容,如果未能解决你的问题,请参考以下文章

致命错误 C1083:无法打开包含文件:'atlbase.h' Pyinsane 包 [重复]

VC6:致命错误 C1083:无法打开包含文件:“stdint.h”

收到“致命错误 C1083:无法打开包含文件:'gxall.h':没有这样的文件或目录”[重复]

致命错误 C1083:无法打开包含文件:'boost/regex.hpp':没有这样的文件或目录

无法在 Windows 中安装 pycocotools:致命错误 C1083:无法打开包含文件:'io.h':没有此类文件或目录错误:

致命错误 C1083:无法打开包含文件:'boost/config.hpp':没有这样的文件或目录