MinGWのgccでboostを使いたかったので、こちらのサイトを参考に
bootstrap.bat gcc
を実行しました。すると
Building Boost.Build engine builtins.c: In function 'builtin_readlink': builtins.c:1879:39: error: 'FSCTL_GET_REPARSE_POINT' undeclared (first use in th is function) int okay = DeviceIoControl(hLink, FSCTL_GET_REPARSE_POINT, NULL, 0, &buf, s izeof(buf), &n, NULL); ^ builtins.c:1879:39: note: each undeclared identifier is reported only once for e ach function it appears in Failed to build Boost.Build engine. Please consult bootstrap.log for furter diagnostics. You can try to obtain a prebuilt binary from http://sf.net/project/showfiles.php?group_id=7586&package_id=72941 Also, you can file an issue at http://svn.boost.org Please attach bootstrap.log in that case.
と、FSCTL_GET_REPARSE_POINTが宣言されていないというコンパイルエラーになりました。
ググったところ、既にBoostにバグ報告されているようで、解決方法も載っていました。 https://svn.boost.org/trac/boost/ticket/9301
FSCTL_GET_REPARSE_POINTはwinioctl.hに定義されていますが、builtins.cにこのヘッダがインクルードされていないのが原因のようです。このファイルにはwindows.hがインクルードされており、windows.h内部でwinioctl.hをインクルードしているだろうと期待していたのがバグの原因ではないだろうかと、このバグ報告者は仰っています(多分)。
解決方法は、boostのディレクトリ/tools/build/v2/engine/builtins.cの33行目の
#ifdef OS_NT #include <Windows.h> #endif
を
#ifdef OS_NT #include <winioctl.h> #endif
にすれば大丈夫です。ちなみにこのバグはMSVCでビルドした時はおきません。MSVCのWindows.hでは内部でwinioctl.hをインクルードしているからです(MinGWのWindows.hはそうではない)。