CentOS 8へのGCC 4.8.5のインストール

CentOS 8へのGCC 4.8.5のインストール

GCC 8.4.1を使用してCentOS 8 ClassicにGCC 4.8.5をインストールしようとしています。私がしたことは次のとおりです(最近の進捗状況を反映して質問が更新されました)。

前提条件のインポート

yum install gcc make glibc-devel glibc-devel.i686 libstdc++-8.4.1-1.el8.i686

以下の説明に従って、コンパイラとその依存関係を取得します。

https://bytefreaks.net/gnulinux/downgrade-gcc-on-centos-7-0-64bit-to-version-4-8-2

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
tar -xvf gcc-4.8.5.tar.gz;
cd gcc-4.8.5/
./contrib/download_prerequisites;

libc_name_p の二重定義を回避するには、次のようにファイルをパッチします。

https://unix.stackexchange.com/a/571800

Except.cに含まれるcfns.hファイルから

cfns.h を編集し、関数宣言を変更します。

#ifdef __GNUC__
__inline
#endif
const char * libc_name_p (const char *, unsigned int);

...そして関数の定義

#ifdef __GNUC__
__inline
#ifdef __GNUC_STDC_INLINE__
__attribute__ ((__gnu_inline__))
#endif
#endif
const char * libc_name_p (const char *, unsigned int);

次のコードとそれに続く宣言/定義

#ifdef __GNUC__
#ifdef __GNUC_STDC_INLINE__
__attribute__ ((__gnu_inline__))
#else
__inline
#endif
#endif

以下の説明に従ってファイルをパッチして ucontext_t の名前を変更します。

ソースからgcc-5をコンパイルする方法は?

https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=883312dc79806f513275b72502231c751c14ff72

ファイル内でisなどstruct ucontextに置き換えます。ucontext_tlibgcc/config/<arch>/linux-unwind.h<arch>i386aarch64alpha

ここで説明されているように構成します。

dnf経由でCentos 8にレガシーgccパッケージをインストールする

mkdir BUILD
cd BUILD
export CFLAGS="-O2 -march=native -pipe"
export CXXFLAGS=$CFLAGS
export LD_LIBRARY_PATH="/lib:/lib64:"$LD_LIBRARY_PATH
../configure --prefix=$HOME/local/gcc/4.8.5

立てる

make
make install

次のエラーにより、MAKE フェーズでプロセス全体が失敗します。

/home/sergey/Desktop/gcc-4.8.5/BUILD/./gcc/cc1plus: 
/home/sergey/Desktop/gcc-4.8.5/BUILD/x86_64-unknown-linux-gnu/
libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.9' not found
(required by /home/sergey/Desktop/gcc-4.8.5/BUILD/./gcc/cc1plus)

取り付け位置を修正してみLD_LIBRARY_PATH="/lib:/lib64:"$LD_LIBRARY_PATHましたが、役に立ちませんでした。どちらも必要なバージョンが存在するようです。libstdc++-8.4.1-1.el8.x86_64libstdc++-8.4.1-1.el8.x686CXXABI/lib/lib64

strings /lib64/libstdc++.so.6 | grep CXXABI
...
CXXABI_1.3.9
...

私が試した代替案(また失敗しました)

以下を設定すると、次のようになりexport CXXFLAGS=$CFLAGS" -std=gnu++98"ます。

make[6]: *** No rule to make target '../src/c++11
/libc++11convenience.la', needed by 'libstdc++.la'.  Stop.

設定すると、--with-multilib-list=m64次のようになります。

configure: error: in `/home/sergey/Desktop/gcc-4.8.5/BUILD/
x86_64-unknown-linux-gnu/libsanitizer':
configure: error: C compiler cannot create executables

この問題を克服する方法を理解するのに役立ちますか?ありがとう

答え1

適切なものからエラーレポート:

ヤクブイエリーネック2017-05-13 06:52:08 UTC

バグはGCC 4.8側にあるため、パッチを適用するか、-std=gnu++98でビルドする必要があります。これで __GNUC_STDC_INLINE__ が定義されず、正しくコンパイルされます。

この回答も確認してください。https://unix.stackexchange.com/a/472713/260833

関連情報