web-dev-qa-db-ja.com

Arch:toplev.oのコンパイルがGCCインストールで失敗する

現在、AURを使用してgcc41をインストールしようとしていますが、問題が発生しています。

再定義エラーがあるためにtoplevオブジェクトのコンパイルを完了できないため、コンパイルプロセスを実行するたびにビルドが失敗します。

これがエラーです。ここからどこへ行けばいいのかよくわかりません。

In file included from ../../gcc/toplev.c:31:0:
../../gcc/gcov-io.h: In function ‘gcov_position’:
../../gcc/system.h:575:55: warning: ISO C does not support ‘__FUNCTION__’ predefined identifier [-Wpedantic]
((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
                                                   ^
../../gcc/gcov-io.h:572:3: note: in expansion of macro ‘gcc_assert’
   gcc_assert (gcov_var.mode > 0);
   ^
../../gcc/toplev.c: At top level:
../../gcc/toplev.c:524:1: error: redefinition of ‘floor_log2’
 floor_log2 (unsigned Host_WIDE_INT x)
 ^
In file included from ../../gcc/toplev.c:59:0:
../../gcc/toplev.h:175:1: note: previous definition of ‘floor_log2’ was here
 floor_log2 (unsigned Host_WIDE_INT x)
 ^
../../gcc/toplev.c:559:1: error: redefinition of ‘exact_log2’
 exact_log2 (unsigned Host_WIDE_INT x)
 ^
In file included from ../../gcc/toplev.c:59:0:
../../gcc/toplev.h:181:1: note: previous definition of ‘exact_log2’ was here
 exact_log2 (unsigned Host_WIDE_INT x)
 ^
Makefile:2064: recipe for target 'toplev.o' failed
make[2]: *** [toplev.o] Error 1
make[2]: Leaving directory '/tmp/yaourt-tmp-michael/aur-gcc41/src/gcc-4.1.2/build/gcc'
Makefile:3907: recipe for target 'all-gcc' failed
make[1]: *** [all-gcc] Error 2
make[1]: Leaving directory '/tmp/yaourt-tmp-michael/aur-gcc41/src/gcc-4.1.2/build'
Makefile:617: recipe for target 'all' failed
make: *** [all] Error 2
3
Roflmuffin

私は前にこのようなものに遭遇しました。問題は、GCC 5.2.0-1(最新のArchバージョン)を使用してAURからgcc41をコンパイルしようとしていることだと思います。GCCはバージョンが進むにつれて新しいエラーを追加するため、古いバージョンのGCCのソースコードはそうではありません。 GCCの新しいバージョンでは常に有効と見なされます。この警告を無効にする方法を見つけることができれば、それでうまくいくかもしれません。 Archウェイバックマシンを使用してgcc4.2バイナリを取得できる場合は、gcc4.2ソースをそれ自体でバイナリ形式でコンパイルできます。

2
user1902689

gcc 4.4.7も新しいgccバージョンでインストールしようとしました。私はあなたと同じエラーを見てきました。 このバグレポート によると、問題はフラグ-fno-gn89-inlineに起因します。これは、新しいgccバージョンでインライン関数を処理するためのデフォルトのフラグになりました。 gcc 4.3の時点では、デフォルトは-fgnu89-inlineでした。したがって、コンパイル時に-fgnu89-inlineフラグを設定するだけです。

私はこれを試してみました

CFLAGS='-fgnu89-inline -g -O2' CXXFLAGS='-fgnu89-inline -g -O2' ./configure
make

しかし、それでも同じエラーが発生します。フラグが正しく転送されないと思いますが、わかりません。それから私は通常を試しました

./configure

Makefileの2行をから変更しました

CC = gcc
CXX = g++

CC = gcc -fgnu89-inline
CXX = g++ -fgnu89-inline

これで、エラーは表示されなくなりました。

しかし、私は他のエラーに遭遇しました:

@itemx must follow @item

これらは新しいバージョンのtexinfoが原因であるため、古いバージョンのtexinfoを使用することができます。手作業でも直せるかもしれませんが、1件試してみましたが、何をしているのかわからないので、この道をたどりませんでした。

簡単に言うと、仮想マシンまたはDockerイメージを実行する方が良いと思います。

2
pfnuesel