Devuan Excalibur GNU / Linux(systemdなしのDebian Trixieなど)のような最新のシステムからGCC 8.xをダウンロードしてビルドしようとすると、次のエラーで失敗します。
libstdc++.so.6: version `GLIBCXX_3.4.30' not found
欠落している関連[?]の上にシステムを手動でコピーしてlibstdc++6.so
プロセスを数回繰り返すと、他のエラーが発生します。
make[7]: Entering directory '/usr/local/src/gcc-8.5.0/x86_64-pc-linux-gnu/32/libitm'
In file included from /usr/include/linux/fs.h:19,
from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:68:
/usr/include/linux/mount.h:96:6: error: multiple definition of ‘enum fsconfig_command’
enum fsconfig_command {
^~~~~~~~~~~~~~~~
In file included from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:55:
/usr/local/src/gcc-8.5.0/host-x86_64-pc-linux-gnu/gcc/include-fixed/sys/mount.h:249:6: note: previous definition here
enum fsconfig_command
^~~~~~~~~~~~~~~~
In file included from /usr/include/linux/fs.h:19,
from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:68:
/usr/include/linux/mount.h:130:8: error: redefinition of ‘struct mount_attr’
struct mount_attr {
^~~~~~~~~~
In file included from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:55:
/usr/local/src/gcc-8.5.0/host-x86_64-pc-linux-gnu/gcc/include-fixed/sys/mount.h:219:8: note: previous definition of ‘struct mount_attr’
struct mount_attr
^~~~~~~~~~
変ですね。しかし、ライブラリのバージョンを強制的に適用したいのは間違っているかもしれません。とにかく - 実際に私のコンピュータにGCC 8.5.0をどのようにビルドできますか?
メモ:
- 次のように構成されています
./configure --disable-bootstrap --enable-languages=c,c++
。 - 追加情報はリクエストに応じて提供されます。
答え1
ソリューションにはいくつかのステップが含まれます。
- GCC標準C ++ライブラリの静的64ビットバージョンと32ビットバージョン用のaptパッケージをインストールします
libstdc++-dev
。lib32stdc++-dev
- サニタイザライブラリが構築されないようにGCCリポジトリを設定します。
--disable-libsanitizer
コマンドに引数を追加しますconfigure
。
これだけで十分です。時間が経つにつれて、最新バージョンの Debian では、修正または解決しようとするよりも多くの問題が発生する可能性があります。
関連GCC「バグ」ページ: