我正在尝试在Fedora 26上使用MinGW交叉编译64位Windows的OpenImageIO。在使用yum
获取依赖项的mingw版本后,我运行了mingw64-cmake
,然后是make
。然而,我立即收到一个有关未找到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
?更新: 我进行了额外的研究并了解到以下内容:
#include_next预处理指令的行为与#include指令相似,但它专门排除包含文件所在目录,不会搜索该文件的路径。
这就解释了为什么cstdlib
不能从同一文件夹中找到stdlib.h
。但是cstdlib
是MinGW的一部分,而不是我正在尝试编译的任何代码的一部分。因此,我仍然不知道出了什么问题或如何修复此错误。编辑:以下是编译器版本信息,如果有用的话:https://pastebin.com/PZiXS2fg。这是一个全新的安装,因此不应该有任何异常情况。
mingw64
包含哪个g++
版本? - TriskalJMg++ -c
编译#include <cstdlib>
,或者只用gcc -c
编译#include <stdlib.h>
,它能找到吗? - ssbssamake VERBOSE=1
的输出吗?这样我们就可以知道用于编译 argparse.cpp 的完整命令行选项了。 - ssbssaCMakeFile
中删除-isystem
似乎可以解决问题。之后我遇到的新错误是通过从oiio/src/include/OpenImageIO/missing_math.h
中消除不必要的 Win32 特定定义来解决的。现在没有更多的错误了,它似乎可以编译。感谢你的提示!仍然需要弄清楚-isystem
来自哪里以及如何在 cmake 后修复它,这样就可以变成一个答案。 - Steve