Por que a Biblioteca C ++ não está desabilitada ao construir o GCC?

1

Eu tenho o segundo para o mais recente gcc e binutils mais recentes e estou tentando criar um compilador cruzado em um sistema Debian. Por algum motivo, o GCC não compilará:

make[2]: Leaving directory '/home/dylan/Documents/cross/gcc-build/fixincludes'
Configuring in ./gmp
configure: error: invalid feature name: libstdc++-v3
make[1]: *** [configure-gmp] Error 1
make[1]: Leaving directory '/home/dylan/Documents/cross/gcc-build'
make: *** [all] Error 2

com esta configuração:

../gcc-4.9.0/configure                               \
    --target=$TARGET                                \
    --prefix=$PREFIX                                  \
    --with-sysroot=/mnt                              \
    --with-newlib                                    \
    --without-headers                                \
    --with-local-prefix=/tools                       \
    --with-native-system-header-dir=/tools/include   \
    --disable-nls                                    \
    --disable-shared                                 \
    --disable-multilib                               \
    --disable-decimal-float                          \
    --disable-threads                                \
    --disable-libatomic                              \
    --disable-libgomp                                \
    --disable-libitm                                 \
    --disable-libquadmath                            \
    --disable-libsanitizer                           \
    --disable-libssp                                 \
    --disable-libvtv                                 \
    --disable-libcilkrts                             \
    --disable-libstdc++-v3                           \
    --enable-languages=c,c++

Eu corri a verificação de versão do Linux From Scratch e consegui isto:

bash, version 4.2.37(1)-release
/bin/sh -> /bin/bash
Binutils: (GNU Binutils for Debian) 2.22
bison (GNU Bison) 2.5
/usr/bin/yacc -> /usr/bin/bison.yacc
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.13
diff (GNU diffutils) 3.2
find (GNU findutils) 4.4.2
GNU Awk 4.0.1
/usr/bin/awk -> /usr/bin/gawk
gcc (Debian 4.7.2-5) 4.7.2
GNU C Library (Debian EGLIBC 2.13-38+deb7u4) stable release version 2.13
grep (GNU grep) 2.12
gzip 1.5
Linux version 3.2.0-4-amd64 ([email protected]) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.60-1+deb7u3
m4 (GNU M4) 1.4.16
GNU Make 3.81
patch 2.6.1
Perl version='5.14.2';
GNU sed version 4.2.1
tar (GNU tar) 1.26
Texinfo: makeinfo (GNU texinfo) 4.13
xz (XZ Utils) 5.1.0alpha
Compilation OK

Eu não acho que isso seja um bug como eu vejo no google, no entanto todos Essas correções e dicas que vejo não são problema meu. Parece como se a biblioteca C ++ não será desativada.

    
por user3272334 11.09.2014 / 12:43

1 resposta

3

Eu tive exatamente o mesmo problema e fiquei intrigado. A pista estava na linha de erro:

configure: error: invalid feature name: libstdc++-v3
make[1]: *** [configure-gmp] Error 1

evidentemente, o configure-gmp target (in make) recebeu o nome do recurso do projeto pai.

O truque é soletrar da seguinte forma na linha de comando:

--disable-libstdc__-v3

Sim, está certo. Substituir os sublinhados pelos sinais de mais!

NB: de acordo com a saída ./configure --help do GCC 5.1, é possível que a opção --disable-libstdcxx também tenha o mesmo efeito. No entanto, não está claro quando isso foi apresentado e eu não verifiquei.

Leitura voluntária;)

Esta é minha teoria baseada no relatório de erros no rastreador do GCC.

Sua linha de comando, como a minha, sugere que você estava usando o GMP que já está vinculado à árvore de origem do GCC ou o que foi baixado pelo script contrib/download_prerequisites de dentro do tarball do GCC (esse é o método que usei ) - que faz o symlinking.

Vamos supor esse caso no momento. Conforme listado nesta página da documentação , GMP, MPFR e MPC são pré-requisitos para o GCC. Veja a seção da página Wiki Bibliotecas de suporte para obter uma explicação mais detalhada desse "built-in" método.

Os códigos de script acima mencionados (a partir do GCC 5.1) gmp-4.3.2 devem ser baixados do servidor FTP da GNU.

Curiosamente 4.3.2 é mencionado na página de lançamentos antigos no escopo da versão 4.3.1:

Issues with GMP 4.3.1 (see also info about 4.3.2 above):

mas, na verdade, não recebe sua própria listagem (nem uma data / hora).

No relatório de erros, no rastreador do GCC, Ralf observa:

This error is from the Autoconf code that parses arguments, it currently disallows characters other than alphanumeric, minus, dot, or underscore in --enable/--disable/--with/--without arguments. I suppose this should be fixed in Autoconf.

However, there is also a bug in configure.ac, and with that fixed, you will be able to use

--disable-libstdc__-v3

(i.e., with the plus signs converted to underscore). Once GCC switches to a fixed Autoconf version, the plus sign conversion will not be needed any more.

Agora, como estamos obtendo os pacotes já preparados com qualquer versão do Autoconf disponível na máquina do mantenedor de pacotes e estamos usando uma versão GMP relativamente antiga, é lógico que a versão gerada O script configure dentro do tarball do GMP é propenso ao defeito observado por Ralf no bilhete mencionado acima.

Por isso, você precisa contornar o bug bobo, devido a uma dependência que é um pouco mais antiga do que talvez seja necessária.

    
por 24.04.2015 / 22:21