如何在 cygwin 下 mingw 中更改系统包含的顺序?

如何在 cygwin 下 mingw 中更改系统包含的顺序?

我尝试在 cygwin32 下使用 mingw32 进行交叉编译。但是,我收到涉及 float.h 的错误

In file included from /usr/i686-w64-mingw32/sys-root/mingw/include/winnt.h:16:0,
                 from /usr/i686-w64-mingw32/sys-root/mingw/include/minwindef.h:146,
                 from /usr/i686-w64-mingw32/sys-root/mingw/include/windef.h:8,
                 from /usr/i686-w64-mingw32/sys-root/mingw/include/windows.h:69,
                 from globals.h:17,
                 from globals.c:10:
/usr/i686-w64-mingw32/sys-root/mingw/include/float.h:278:57: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
 _CRTIMP double __cdecl __MINGW_NOTHROW _chgsign (double _X);

我在这里找到了一篇有类似问题的文章:

https://www.cygwin.com/ml/cygwin/2003-07/msg00525.html

他们建议改变包含的顺序,以便在 gcc float.h 之前找到 mingw float.h。

但是,如果我尝试像这样手动包含标题:

i686-w64-mingw32-gcc -DHAVE_CONFIG_H -I /cygdrive/d/Cygwin32/usr/i686-w64-mingw32/sys-root/mingw/include

使用详细选项,然后我收到一条消息,说我的包含被忽略,因为“是一个重复系统目录的非系统目录。”

我的猜测是,如果我已经安装了 mingw 库和 cygwin 源代码,则通过调用 i686-w64-mingw32-gcc 会自动包含该目录,我确实这样做了。

在编译器详细输出中,我可以清楚地看到包含顺序中的问题。

/usr/lib/gcc/i686-w64-mingw32/4.8.3/include
 /usr/lib/gcc/i686-w64-mingw32/4.8.3/include-fixed
 /usr/i686-w64-mingw32/sys-root/mingw/include

但是我如何将 mingw 包含移到 gcc 包含前面?

答案1

弄清楚了您可以使用 gcc 标志 -nostdinc,然后重新定义包含顺序。

不确定为什么我之前的谷歌搜索没有找到它。

相关内容