プロジェクト

全般

プロフィール

A/I #27

未完了

MSYS2(MINGW)で、GCC4を作れるか再度やってみる

開発 次郎 さんが約1ヶ月前に追加. 30日前に更新.

ステータス:
新規
優先度:
通常
担当者:
開始日:
2026/06/06
期日:
予定工数:

説明

今のMSYS2でも、GCC8がビルドできることは分かっている
どこまで昔のGCCがビルドできるのか?
自分でビルドしなくても、インターネット上のMinGW GCCを使えばいいのか?(自分で作っても同じか?)

開発 次郎 さんが30日前に更新 · 編集済み

これまでの状況

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 を通す必要はない(ビルド中は通してはいけない)。

開発 次郎 さんが30日前に更新

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 を通す必要はない(ビルド中は通してはいけない)。

他の形式にエクスポート: Atom PDF