아치: GCC 설치 중 toplev.o 컴파일에 실패했습니다.

아치: GCC 설치 중 toplev.o 컴파일에 실패했습니다.

현재 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

답변1

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다음에서 두 줄을 변경했습니다.

CC = gcc
CXX = g++

도착하다

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

이를 통해 더 이상 오류가 표시되지 않습니다.

그러나 다른 오류가 발생합니다.

@itemx must follow @item

이러한 문제는 최신 버전으로 인해 발생하므로 texinfo이전 버전을 사용해도 됩니다 texinfo. 어쩌면 수동으로 고칠 수도 있습니다. 케이스에 시도해 보았지만 제가 무엇을 하고 있는지 몰랐기 때문에 그 길을 따르지 않았습니다.

간단히 말해서, 가상 머신이나 도커 이미지를 실행하는 것이 더 나을 것 같습니다.

답변2

나는 전에도 비슷한 일을 겪은 적이 있습니다. 문제는 GCC 5.2.0-1(최신 아치 버전)을 사용하여 AUR에서 gcc41을 컴파일하려고 한다는 것입니다. 릴리스가 계속됨에 따라 GCC에는 새로운 버그가 추가되므로 이전 버전의 GCC 소스 코드가 최신 버전의 GCC에서 항상 유효한 것으로 간주되지는 않습니다. 이 경고를 비활성화하는 방법을 찾을 수 있다면 성공할 수 있습니다. Arch 웨이백 머신을 사용하여 gcc 4.2 바이너리를 얻을 수 있다면 gcc 4.2 소스 코드를 바이너리 형식으로 컴파일할 수 있습니다.

관련 정보