2017-07-21 121 views
8

我想使用MinGW的在Fedora 26的交叉编译OpenImageIO 64位Windows。在使用yum来检索相关性的mingw版本后,我跑mingw64-cmake,然后make。但是,我马上收到一个关于stdlib.h未找到的编译错误。的MinGW /包括/ C++/cstdlib:stdlib.h中:没有这样的文件或目录

[ 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. 

我已经证实,stdlib.h发现至少/usr/include//usr/x86_64-w64-mingw32/sys-root/mingw/include/c++/这里给编译器错误也是文件的位置。

为什么我仍然收到错误stdlib.h: No such file or directory

更新: 我做更多的研究和学习了以下内容: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.

这可以解释为什么cstdlib没有找到相同的文件夹stdlib.h。但cstdlib是MinGW的一部分,而不是我正在编译的代码的任何部分。所以我仍然不知道这里出了什么问题或者如何解决这个错误。

编辑:以下是编译器版本信息,以备任何用途时使用:https://pastebin.com/PZiXS2fg。这是一个全新的安装,所以在那里不应该有任何异常。

+0

出于好奇,这'G ++'版本包含在你的'mingw64'? – TriskalJM

+0

@TriskalJM gcc版本7.1.0 20170502(Fedora的MinGW的7.1.0-1.fc26) – Steve

+0

是不是有你'在/ usr/x86_64的-W64-的mingw32/SYS-根/ MinGW的一个'stdlib.h' /包括/'哪个可以通过'#include_next'找到? – ssbssa

回答

0

采用#include_next似乎导致大量的基于谷歌搜索我的问题。尝试使用下面的语法包括直接stdlib.h:在gcc 6.0加入

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

这句法解决与第三方库的问题。请参阅here的方法和推理。

编辑:更改答案,以反映有关GCC wrapper_headers和新的信息#include_next

+0

这些是GCC配置标志。你是否建议重新编译GCC? –

+0

我试过: 'mingw64-cmake -DCMAKE_CXX_FLAGS =' - with-gxx-include-dir =/usr/x86_64-w64-mingw32/sys-root/mingw/include/C++ --enable-version-specific-运行时-libs'' 但我收到: '无法识别的命令行选项'--with-gxx-include ...'' – Steve

+0

@TriskalJM我添加了'-isystem/usr/x86_64-w64-ming32/sys-root/mingw/include/C++ flag',用'make -n'确认g ++确实在运行该标志,并确认'stdlib.h'在该目录中。尽管如此,仍然会得到完全相同的错误。 – Steve

1

我解决了它,我可以重新编译。

解决方案(对我来说)添加到路径变量CPLUS_INCLUDE_PATH并将其设置为MinGW C++ include目录,对我来说:C:\MinGW\lib\gcc\mingw32\6.3.0\include\c++

我希望它也适合你。

相关问题