Search code examples
c++linuxubuntugccclion

io.h not found CLion in Ubuntu 20.04


I am trying to run a c++ code however, io.h is not found.

'io.h' file not found

It is shown as

#include <io.h>

enter image description here

Additionally, I am getting a bunch of weird problems (for a code that is rather > 16 years old):

 Use of undeclared identifier '_read'

or

Unknown type name '__int64'; did you mean '__int64_t'?

or

Use of undeclared identifier '_O_RDONLY'

or

Use of undeclared identifier '_lseeki64'; did you mean 'fseeko64'?

or

Cannot initialize a parameter of type 'FILE *' (aka '_IO_FILE *') with an lvalue of type 'int'

or

Use of undeclared identifier '_lseek'; did you mean 'fseek'?

or

Use of undeclared identifier '_close'

I wonder if these are related to io.h not being found.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal

I have CLion 2020.2.3 and

$ gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Solution

  • Add compiler directives to manage multi-os compilation.

    //old line: #include<io.h>
    #ifdef _WIN32
        #include <io.h>
    #elif __linux__
        #include <inttypes.h>
        #include <unistd.h>
        #define __int64 int64_t
        #define _close close
        #define _read read
        #define _lseek64 lseek64
        #define _O_RDONLY O_RDONLY
        #define _open open
        #define _lseeki64 lseek64
        #define _lseek lseek
        #define stricmp strcasecmp
    #endif
    //SAF_Handle.cpp line:458 old line:INFILE = _open(infilename, _O_RDONLY | _O_BINARY);
    #ifdef __linux__
      INFILE = _open(infilename, _O_RDONLY);
    #elif
      INFILE = _open(infilename, _O_RDONLY | _O_BINARY);
    #endif
    

    Fixed a few loops where the iterator variable 'i' was undeclared.