5

I fail to compile a C++ project for mobile device with Windows Mobile (Windows CE-based) operating system and Visual C++ compiler from Visual Studio fails with:

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

EDIT
I am trying to compile the SQLite amalgamation, the shell.c file includes the call to this io.h but the io.h is missing from the files.

I googled and I couldn't locate how can I get this .h file.

Can someone point me in the right direction?

mloskot
  • 37,086
  • 11
  • 109
  • 136
Pentium10
  • 204,586
  • 122
  • 423
  • 502

5 Answers5

10

The io.h file is not available in SDKs for Windows CE-based systems like Windows Mobile. In fact, io.h header has never been a part of ISO C nor C++ standards. It defines features that belongs POSIX compatibility layer on Windows NT, but not Windows CE.

Due to lack of POSIX features on Windows CE, I developed a small utility library WCELIBCEX. It does include io.h but a very minimal version and which is likely insufficient for SQLite. However, as ctacke mentioned, you should use SQLite port for Windows CE because original version of SQLite is not compilable for this platform.

p.s. Note, Your question does not specify explicitly that you're building for Windows Mobile. If one doesn't spot the .NET Compact Framework mentioned in tags, then the whole question is ambiguous.

mloskot
  • 37,086
  • 11
  • 109
  • 136
5

It looks like io.h is part of standard VS, but proobably not part of WINCE edition (if there is one). From your dir /s it looks like you don't have it.

I looked at shell.c and it does not include io.h that for wince:

#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

You are probably compiling with the wrong macros defined.

  • where can I change those macros you are talking about and with what? – Pentium10 Feb 05 '10 at 23:44
  • First step would be to figure out what Macros are being used. The VS compilation should give you a log of the complete command line. Once you figure out what macros are being used, and that is really the problem, you should be able to add your own macros (or DEFINES) through the VS project options. It could also be that you have specified the wrong target when compiling, making VS choose the wrong macros –  Feb 05 '10 at 23:51
  • The weirdest thing is I haven't found a compiled sqlite for WinMobile. I was wondering if someone has done this. I think there are already ported sqlite shells to windows mobile but I was unable to locate a build for them. – Pentium10 Feb 06 '10 at 00:08
1

Have you considered looking at the project files from the SQLite for Windows CE site to see how they got it to compile for CE? I've never seen native code files designed for the desktop ever "just compile" for Windows CE without having to do some preprocessor work and it's likely they've got the answers to what you need in those projects.

ctacke
  • 66,480
  • 18
  • 94
  • 155
0

Found something that looks like your problem here. Apparently, althought io.h is a standard Microsoft header, there is no port of it to mobile plataforms.

You are probably using some library that was not designed for use with mobile devices, and that library must be trying to use the non-mobile API.

cake
  • 1,336
  • 1
  • 13
  • 20
0

If you see this error while trying to install a Python library, follow https://stackoverflow.com/a/16588726/284795

Basically, remove visual studio 2010, then some registry keys manually then reinstall. Worked for me.

Community
  • 1
  • 1
Colonel Panic
  • 132,665
  • 89
  • 401
  • 465