私はDebianリポジトリで利用可能なgcc-12を使ってDebian Bookworm(12)にGCC 9.5をインストールしようとしました。make
見つからないため、ビルドに失敗しましたGLIBCXX_3.4.30
。ログの関連部分make
は次のとおりです。
Making all in po
make[5]: Entering directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/po'
msgfmt -o de.mo ../../../../gcc-releases-gcc-9.5.0/libstdc++-v3/po/de.po
msgfmt -o fr.mo ../../../../gcc-releases-gcc-9.5.0/libstdc++-v3/po/fr.po
msgfmt: /home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `GLIBCXX_3.4.30' not found
(required by /lib/x86_64-linux-gnu/libicuuc.so.72)
make[5]: *** [Makefile:550: de.mo] Error 1
make[5]: *** Waiting for unfinished jobs....
msgfmt: /home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `GLIBCXX_3.4.30' not found
(required by /lib/x86_64-linux-gnu/libicuuc.so.72)
make[5]: *** [Makefile:550: fr.mo] Error 1
make[5]: Leaving directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/po'
make[4]: *** [Makefile:562: all-recursive] Error 1
make[4]: Leaving directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3'
make[3]: *** [Makefile:487: all] Error 2
make[3]: Leaving directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3'
make[2]: *** [Makefile:19557: all-stage1-target-libstdc++-v3] Error 2
make[2]: Leaving directory '/home/apps/builds/gcc/gcc-9/build'
make[1]: *** [Makefile:27270: stage1-bubble] Error 2
make[1]: Leaving directory '/home/apps/builds/gcc/gcc-9/build'
make: *** [Makefile:1002: all] Error 2
次の設定オプションを使用しました。
configure --prefix=path-to-install-dir --disable-multilib --enable-languages=c,c++,fortran --enable-checking --program-suffix=9.5
私は私が経験しているエラーを本当に理解していません。興味深いことに、同じシステムのソースからGCC 12を正常にコンパイルできます。/home/apps/builds/gcc/gcc-9/gcc-releases-gcc-9.5
.gccでビルドすると、GCCソースコードがそこにあります/home/apps/builds/gcc/gcc-9/build
。GLIBCXX
inの最新バージョン/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
は次のとおりです。GLIBCXX_3.4.28
答え1
ここでの問題は、ビルドが最新バージョンに依存するシステムライブラリに依存することになりますが、それlibstdc++.so.6
自体は古いバージョンをビルドすることですlibstdc++.so.6
。後者は前者より優先的に使用される。msgfmt
これは(あなたの例では失敗するものです)のようなサードパーティ製のツールを実行しても同じです。
したがって、厳密に言うと、問題はビルドに使用されたコンパイラではなく、新しいコンパイラの依存関係を構築するために使用されたライブラリです...ビルドをスキップすることでこの問題を解決できますlibstdc++
。オプション--disable-libstdcxx
に追加してください。configure
これにより構成が機能するようになりましたが、特に確認するためにビルドを実行しませんでした。 「欠落」が原因で問題が発生したのか、このシステムが代わりに使用されるのかはconfigure
わかりません。libstdc++
libstdc++
ご利用いただくとさらに便利になりますパッケージgcc-9
が不安定です- 正しく構築されたすべてのライブラリを提供します。コンテナイメージまたはchrootを使用してアクセスできます(参考資料を参照mmdebstrap
)。
答え2
独自のGCCバージョンを構築するには、libstdc++.so.6
まずGNUテキストのインポートこれは純粋なCで書かれています。0.17。
構成時に異なるプレフィックスを提供します。例/opt/gettext
:
./configure --prefix=/opt/gettext
GCCをビルドすると一時的に追加されます${prefix}/bin
。PATH