compilação cruzada gcc falha

3

Estou tentando construir um gcc de compilação cruzada para o ARM. Isso será para atualizar um compilador cruzado do ARC do gcc existente. A compilação é executada até chegar ao build libstdc ++, depois que o libgcc1 é compilado com sucesso.

O erro é:

<gcc-object-path>/./gcc/xgcc -shared-libgcc -B<gcc-object-path>/./gcc -nostdinc++ -L<gcc-object-path>/<target>/libstdc++-v3/src -L<gcc-object-path>/<target>/libstdc++-v3/src/.libs -L<gcc-object-path>/<target>/libstdc++-v3/libsupc++/.libs -B<sysroot>/<target>/bin/ -B<sysroot>/<target>/lib/ -isystem <sysroot>/<target>/include -isystem <sysroot>/<target>/sys-include --sysroot=<boot-strap-xgcc-sysroot>   -x c++-header -nostdinc++ -g -Os  -I<gcc-object-path>/<target>/libstdc++-v3/include/<target> -I<gcc-object-path>/<target>/libstdc++-v3/include -I<gcc-source-path>/libstdc++-v3/libsupc++ -O2 -g -std=gnu++0x <gcc-source-path>/libstdc++-v3/include/precompiled/stdc++.h \
        -o <target>/bits/stdc++.h.gch/O2ggnu++0x.gch
<gcc-source-path>/libstdc++-v3/include/precompiled/stdc++.h:52:20: fatal error: ccomplex: No such file or directory
 #include <ccomplex>
                    ^
compilation terminated.

encontre o ccomplex-object-path -name mostra -print:

<gcc-object-path>/<target>/libstdc++-v3/include/tr1/ccomplex
<gcc-object-path>/<target>/libstdc++-v3/include/ccomplex

O comando de compilação tem

-I<gcc-object-path>/<target>/libstdc++-v3/include

sobre isso.

<gcc-object-path>/<target>/libstdc++-v3/include/ccommon

é um link simbólico para

<gcc-source-path>/libstdc++-v3/include/c_std/ccomplex

Mas esse arquivo não existe na fonte naquele local, então é um link simbólico quebrado e a compilação falha. O arquivo ccomplex existe na árvore de origem em três outros locais, no entanto. Existem outros 6 links simbólicos que também são quebrados de forma semelhante.

Olhando para o libstdc ++ - v3 / include / Makefile que gera esses links simbólicos, ele espera encontrar todos os arquivos c_base_headers no mesmo local na árvore de origem, mas eles não são. Como isso deve funcionar?

As opções de configuração do gcc são:

gcc-${GCC_VERSION}/configure --target=$CONF_TARGET --prefix=${PREFIX} --exec_prefix=${PREFIX} --bindir=${PREFIX}/bin --sbindir=${PREFIX}/bin --libexecdir=${PREFIX}/libexec --datadir=${PREFIX}/share --sysconfdir=${PREFIX}/etc --sharedstatedir=${PREFIX}/share/com --localstatedir=${PREFIX}/var --libdir=${PREFIX}/lib --includedir=${PREFIX}/include --oldincludedir=${PREFIX}/include --infodir=${PREFIX}/share/info --mandir=${PREFIX}/share/man --enable-largefile --disable-nls --enable-ipv6 --with-gnu-ld --enable-shared --enable-languages=c,c++,objc,fortran --enable-threads=posix --disable-multilib --enable-c99 --enable-long-long --enable-symvers-gnu --enable-libstdcxx-pch --program-prefix=${CMD_PREFIX} --enable-target-optspace --enable-cheaders=c_std --disable-bootstrap --disable-libgomp --disable-libmudflap --with-float=soft --with-sysroot=${NEWSYSROOT} --with-build-sysroot=${SYSROOT} --with-build-time-tools=${INSTALLDIR}/${PREFIX}/${CONF_TARGET}/bin --disable-libunwind-exceptions --disable-libssp --enable-__cxa_atexit
    
por Jay 02.06.2017 / 19:50

1 resposta

0

Qual ambiente você está usando? E qual é o seu ambiente alvo?

O ARM tem algumas ferramentas disponíveis para download em site para desenvolvedores de ARM .

Você pode precisar disponibilizar bibliotecas e arquivos de cabeçalho para o seu ambiente de destino. Para o FreeBSD, seria o arquivo base.txz apropriado que precisa ser descompactado no lugar certo.

Para o 386 e o amd64 FreeBSD v 11. * i existem compiladores cruzados do GCC para o arm. Ou para ser específico arm64 / aarch64. Mesmo com Ada. Isso é nas portas encontradas em / usr / ports / lang / gnatcross *.

Se você pesquisar no Google, deve ser fácil compilar um compilador cruzado genérico usando algumas opções de configuração. Muitos usam o braço como exemplo ao compilar o compilador cruzado.

Se você tem um PI de framboesa que é arquitetura arm ou aarch64, você pode ter um bom ambiente nativo. Tudo o que você precisa é evitar coisas dependentes do sistema operacional.

O RPI tem vários sistemas operacionais disponíveis, incluindo: FreeBSD, Raspbian e outras versões Linux e BSD.

Estou trabalhando na compilação cruzada do GCC para o aarch64 FreeBSD 12. Isso requer algumas modificações. Então eu copiei as portas envolvidas e as modifiquei. O difícil é descobrir como cruzar compilar o gcc. E descubra quais opções precisam ser desativadas.

    
por 30.09.2017 / 21:08

Tags