我无法为使用 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 文件。
有人能指出我正确的方向吗?
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,那么整个问题就不明确了。
我查看了 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
您可能使用了错误定义的宏进行编译。
SQLite for Windows CE 站点 的项目文件,看看他们是如何为 CE 进行编译的? 我从未见过专为桌面设计的本机代码文件“只需编译”Windows CE,而无需执行一些预处理器工作,而且它们很可能已经得到了您在这些项目中所需的答案。
这里发现了一些看起来像您的问题的东西。显然,虽然 io.h 是标准的 Microsoft 标头,但没有将其移植到移动平台。
您可能正在使用一些并非设计用于移动设备的库,并且该库必须尝试使用非移动 API。