编译项目失败,缺少io.h文件

问题描述 投票:0回答:5

我无法为使用 Windows Mobile(基于 Windows CE)操作系统的移动设备编译 C++ 项目,并且 Visual Studio 中的 Visual C++ 编译器失败并显示:

Error   1   fatal error C1083: Cannot open include file: 'io.h'

编辑
我正在尝试编译 SQLite 合并,shell.c 文件包含对此 io.h 的调用,但文件中缺少 io.h。

我用谷歌搜索,找不到如何获取这个 .h 文件。

有人能指出我正确的方向吗?

c++ include compact-framework
5个回答
10
投票

io.h
文件在基于 Windows CE 的系统(如 Windows Mobile)的 SDK 中不可用。 事实上,io.h
头文件从来都不是 ISO C 或 C++ 标准的一部分。它定义了属于 Windows NT 上的 
POSIX 兼容层,但不属于 Windows CE

由于 Windows CE 上缺乏 POSIX 功能,我开发了一个小型实用程序库

WCELIBCEX它确实包含 io.h,但它是一个非常小的版本,对于 SQLite 来说可能不够。但是,正如 ctacke 提到的,您应该使用 Windows CE 的 SQLite 端口,因为原始版本的 SQLite 无法在该平台上编译。

附注请注意,您的问题没有明确指定您正在为 Windows Mobile 构建。如果没有发现标签中提到的 .NET Compact Framework,那么整个问题就不明确了。


5
投票
看起来 io.h 是标准 VS 的一部分,但可能不是 WINCE 版本的一部分(如果有的话)。从你的目录看来你没有它。

我查看了 shell.c,它不包括 wince 的 io.h:

#if defined(_WIN32) || defined(WIN32) # include <io.h> #define isatty(h) _isatty(h) #define access(f,m) _access((f),(m)) #else /* Make sure isatty() has a prototype. */ extern int isatty(); #endif #if defined(_WIN32_WCE) /* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty() * thus we always assume that we have a console. That can be * overridden with the -batch command line option. */ #define isatty(x) 1 #endif

您可能使用了错误定义的宏进行编译。



0
投票

这里发现了一些看起来像您的问题的东西。显然,虽然 io.h 是标准的 Microsoft 标头,但没有将其移植到移动平台。

您可能正在使用一些并非设计用于移动设备的库,并且该库必须尝试使用非移动 API。


0
投票
如果您在尝试安装 Python 库时看到此错误,请按照

https://stackoverflow.com/a/16588726/284795

基本上,删除 Visual Studio 2010,然后手动删除一些注册表项,然后重新安装。为我工作。

© www.soinside.com 2019 - 2024. All rights reserved.