Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mingw/include/c++/cstdlib: stdlib.h: No such file or directory

I am trying to cross-compile OpenImageIO for 64-bit Windows on Fedora 26 using MinGW. After using yum to retrieve the mingw versions of the dependencies, I ran mingw64-cmake followed by make. However, right away I receive a compile error about stdlib.h not being found.

[  0%] Built target CopyFiles
[  0%] Building CXX object src/libutil/CMakeFiles/OpenImageIO_Util.dir/argparse.cpp.obj
In file included from .../oiio/src/libutil/argparse.cpp:36:0:
/usr/x86_64-w64-mingw32/sys-root/mingw/include/c++/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
              ^~~~~~~~~~
compilation terminated.

I have confirmed that stdlib.h is found at least in /usr/include/ and in /usr/x86_64-w64-mingw32/sys-root/mingw/include/c++/ where the file giving the compiler error also is located.

Why do I still receive the error stdlib.h: No such file or directory?

Update: I did additional research and learned the following: The preprocessor directive #include_next behaves like the #include directive, except that it specifically excludes the directory of the including file from the paths to be searched for the named file.

This would explain why cstdlib does not find stdlib.h from the same folder. But cstdlib is part of MinGW and not any part of the code I am trying to compile. So I still have no idea what is wrong here or how to fix this error.

Edit: Here is the compiler version info in case it is of any use: https://pastebin.com/PZiXS2fg. This is a fresh install so there shouldn't be anything unusual there, though.

like image 287
Steve Avatar asked Jul 21 '17 20:07

Steve


2 Answers

I solved it, i can compile again.

The solution (for me) is add to path the variable CPLUS_INCLUDE_PATH and set it to the MinGW c++ include directory, for me: C:\MinGW\lib\gcc\mingw32\6.3.0\include\c++.

I hope it works for you too.

like image 100
izanbf1803 Avatar answered Sep 21 '22 05:09

izanbf1803


The use of #include_next appears to cause lots of issues based on my Googling. Try directly including stdlib.h using the following syntax:

-isystem /usr/x86_64-w64-ming32/sys-root/mingw/include/c++

This syntax was added in gcc 6.0 to solve issues with third-party libraries. See here for the approach and reasoning.

Edit: Changed answer to reflect new information about gcc wrapper_headers and #include_next

like image 21
TriskalJM Avatar answered Sep 19 '22 05:09

TriskalJM