A/I #27
未完了MSYS2(MINGW)で、GCC4を作れるか再度やってみる
説明
今のMSYS2でも、GCC8がビルドできることは分かっている
どこまで昔のGCCがビルドできるのか?
自分でビルドしなくても、インターネット上のMinGW GCCを使えばいいのか?(自分で作っても同じか?)
開発 次郎 さんが29日前に更新 · 編集済み
これまでの状況¶
mingw32-make all-gcc難航中・・・
念のためCopilotにまとめてもらった手順は次。
今、mingw32-make: *** [Makefile:2507: all-build-libiberty] Error 2
MSYS2 で GCC 4.8.5 をビルドする完全手順(Textile 形式)
h2. 1. MinGW64 シェルを起動する
MSYS2 のメニューから MSYS2 MinGW 64-bit を起動する。
プロンプトが次のようになっていること:
MINGW64 ~
2. GCC 4.8.5 のソースを展開し、strerror.c を修正¶
対象ファイル:
gcc-4.8.5/libiberty/strerror.c
MinGW では sys_errlist / sys_nerr が無いため、以下を追加する:
#if defined(MINGW32) || defined(MINGW64) /* Skip sys_nerr / sys_errlist declarations */ #else extern int sys_nerr; extern char *sys_errlist[]; #endif
3. ビルドディレクトリを作成¶
rm -rf ~/build-gcc485 mkdir ~/build-gcc485 cd ~/build-gcc485
4. configure を実行¶
../gcc-4.8.5/configure \ --target=x86_64-w64-mingw32 \ --prefix=/mingw64/gcc-4.8.5 \ --disable-multilib \ --disable-nls \ --disable-win32-registry \ --disable-fixincludes \ --enable-languages=c,c++
ポイント:
fixincludes を完全無効化(MinGW では必須)
CONFIG_SHELL の指定は不要
5. libiberty の Makefile から waitpid を削除(重要)¶
MSYS2 + MinGW‑w64 では wait() が存在しないため
GCC 4.8.5 の waitpid.c はビルド不可。
対象ファイル:
build-gcc485/libiberty/Makefile
以下の 3 箇所から waitpid を削除する:
LIBOBJS の中の
${LIBOBJDIR}./waitpid$U.o
CFILES の中の
waitpid.c
CONFIGURED_OFILES の中の
./waitpid.$(objext)
6. libiberty を clean(依存関係リセット)¶
mingw32-make -C libiberty clean
7. GCC(stage1)をビルド¶
mingw32-make all-gcc mingw32-make install-gcc
8. libgcc をビルド¶
mingw32-make all-target-libgcc mingw32-make install-target-libgcc
9. libstdc++ をビルド¶
mingw32-make all-target-libstdc++-v3 mingw32-make install-target-libstdc++-v3
10. 完了¶
インストール先:
/mingw64/gcc-4.8.5
PATH を通す必要はない(ビルド中は通してはいけない)。
開発 次郎 さんが29日前に更新
1. MinGW64 シェルを起動する¶
MSYS2 のメニューから MSYS2 MinGW 64-bit を起動する。
プロンプトが次のようになっていること:
MINGW64 ~
2. GCC 4.8.5 のソースを展開し、strerror.c を修正¶
対象ファイル:
gcc-4.8.5/libiberty/strerror.c
MinGW では sys_errlist / sys_nerr が無いため、以下を追加する:
#if defined(MINGW32) || defined(MINGW64) /* Skip sys_nerr / sys_errlist declarations */ #else extern int sys_nerr; extern char *sys_errlist[]; #endif
3. ビルドディレクトリを作成¶
rm -rf ~/build-gcc485 mkdir ~/build-gcc485 cd ~/build-gcc485
4. configure を実行¶
../gcc-4.8.5/configure \ --target=x86_64-w64-mingw32 \ --prefix=/mingw64/gcc-4.8.5 \ --disable-multilib \ --disable-nls \ --disable-win32-registry \ --disable-fixincludes \ --enable-languages=c,c++
ポイント:
fixincludes を完全無効化(MinGW では必須)
CONFIG_SHELL の指定は不要
5. libiberty の Makefile から waitpid を削除(重要)¶
MSYS2 + MinGW‑w64 では wait() が存在しないため
GCC 4.8.5 の waitpid.c はビルド不可。
対象ファイル(2 箇所):
build-gcc485/libiberty/Makefile build-gcc485/build-x86_64-w64-mingw32/libiberty/Makefile
以下の 3 箇所から waitpid を削除する:
LIBOBJS の中の
${LIBOBJDIR}./waitpid$U.o
CFILES の中の
waitpid.c
CONFIGURED_OFILES の中の
./waitpid.$(objext)
6. libcpp/configure の dependency-style を強制的に gcc にする(重要)¶
MSYS2 の make は依存関係スタイルを "none" と返すため
GCC 4.8.5 の configure がエラー終了する。
対象ファイル:
gcc-4.8.5/libcpp/configure
次の if 文を検索:
if test x${am_cv_CXX_dependencies_compiler_type-none} = xnone
then as_fn_error "no usable dependency style found"
これを削除し、次の 1 行に置き換える:
CXXDEPMODE=depmode=gcc
7. libiberty を clean(依存関係リセット)¶
mingw32-make -C libiberty clean mingw32-make -C build-x86_64-w64-mingw32/libiberty clean
8. GCC(stage1)をビルド¶
mingw32-make all-gcc mingw32-make install-gcc
9. libgcc をビルド¶
mingw32-make all-target-libgcc mingw32-make install-target-libgcc
10. libstdc++ をビルド¶
mingw32-make all-target-libstdc++-v3 mingw32-make install-target-libstdc++-v3
11. 完了¶
インストール先:
/mingw64/gcc-4.8.5
PATH を通す必要はない(ビルド中は通してはいけない)。