
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
そして、mingw float.h が gcc 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 include を gcc include の前に移動するにはどうすればよいですか?
答え1
gcc フラグ -nostdinc を使用して、インクルード順序を再定義できることがわかりました。
以前の Google 検索でなぜ見つからなかったのかはわかりません。