Arch: Compilando o toplev.o falha na instalação do GCC

2

No momento, estou tentando instalar o gcc41 usando o AUR e estou com um problema.

Toda vez que ele passa pelo processo de compilação, a compilação falha porque não pode concluir a compilação do objeto toplev porque há um erro de redefinição.

Aqui está o erro. Eu realmente não sei para onde ir a partir daqui.

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
    
por Roflmuffin 02.08.2015 / 06:29

2 respostas

2

Eu encontrei algo assim antes. Acho que o problema é que você está tentando compilar o gcc41 do AUR, usando o GCC 5.2.0-1 (versão mais recente do arco). O GCC adiciona novos erros à medida que as versões são executadas, portanto, o código-fonte das versões mais antigas do GCC não é sempre considerado válido nas versões mais recentes do GCC. Se você puder encontrar uma maneira de desativar esse aviso, isso pode funcionar. Se você puder usar a máquina Archbackback para obter um binário 4.2 do gcc, você pode compilar a fonte gcc 4.2 consigo mesmo em formato binário.

    
por 02.08.2015 / 06:52
1

Eu também tentei instalar gcc 4.4.7 com uma nova versão gcc . Eu vi os mesmos erros que você. De acordo com este relatório de bug , o problema vem do sinalizador -fno-gn89-inline , que se tornou o sinalizador padrão para manipulando funções inline em versões mais recentes de gcc . A partir de gcc 4.3 , o padrão foi -fgnu89-inline . Então, tudo que você precisa fazer é definir o -fgnu89-inline flag ao compilar.

Eu tentei isso com

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

mas ainda recebo o mesmo erro. Presumo que as bandeiras não sejam encaminhadas corretamente, mas não sei. Então eu tentei um normal

./configure

e alterou as duas linhas no Makefile de

CC = gcc
CXX = g++

para

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

Com isso, não vi mais os erros.

No entanto, me deparei com outros erros:

@itemx must follow @item

Eles são causados por uma versão mais recente de texinfo , então o que você poderia fazer é usar uma versão mais antiga de texinfo . Talvez você também possa consertá-las manualmente, eu tentei por um caso, mas não sei o que estou fazendo, então não segui esse caminho.

Para encurtar a história, acho que você está melhor executando uma máquina virtual ou uma imagem do docker.

    
por 05.02.2016 / 19:04