ejecutar compilar compilador como c++ linux arm cross-platform crosstool-ng

compilar - Cómo obtener el funcionamiento del compilador C++ crosstool-ng



gcc linux (3)

Estoy intentando que crosstool-ng funcione tanto con C como con C ++. Aunque seleccioné C ++ mientras uso menuconfig, parece que no se compila. El compilador gcc funciona como se esperaba, pero no g ++

No estoy seguro de lo que estoy haciendo mal así que cualquier ayuda sería apreciada.

Seguí los pasos que se encuentran aquí: Construcción de sistemas ARM integrados con Crosstool-NG

$ arm-unknown-linux-gnueabi-cpp main.cpp -o test arm-unknown-linux-gnueabi-cpp: main.cpp: C++ compiler not installed on this system

NOTA: no se encuentra arm-unknown-linux-gnueabi-g++ en el directorio bin. Probé la versión cruzada de la herramienta 1.16.0 y 1.15.3

arm-unknown-linux-gnueabi-cpp -v Using built-in specs. Target: arm-unknown-linux-gnueabi Configured with: /opt/crossArm/.build/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-unknown-linux-gnueabi --prefix=/opt/crossArm/.build/arm-unknown-linux-gnueabi/buildtools --with-local-prefix=/home/jgarvin/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot --disable-libmudflap --with-sysroot=/home/jgarvin/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot --enable-shared --with-pkgversion=''crosstool-NG 1.16.0'' --with-float=soft --enable-__cxa_atexit --with-gmp=/opt/crossArm/.build/arm-unknown-linux-gnueabi/buildtools --with-mpfr=/opt/crossArm/.build/arm-unknown-linux-gnueabi/buildtools --enable-target-optspace --disable-libgomp --disable-libmudflap --disable-nls --disable-multilib --enable-languages=c Thread model: posix gcc version 4.3.2 (crosstool-NG 1.16.0)

Código

#include<iostream> using namespace std; int main(){ cout<<"Hello World"<<endl; return 0; }

En mi archivo build.log veo la opción C ++ activada

[DEBUG] CT_CC_SUPPORT_CXX=y

También lo veo en config.log :

configure:3030: $? = 0 configure:3019: gcc -v >&5 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper Target: i686-linux-gnu Configured with: ../src/configure -v --with-pkgversion=''Ubuntu/Linaro 4.6.3-1ubuntu5'' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu


De, http://briolidz.wordpress.com/2012/02/07/building-embedded-arm-systems-with-crosstool-ng/

Refine su con fi guración ejecutando la interfaz de menú de menú:

$ ./ct-ng menuconfig

En este paso, vaya al menú C Compiler . Luego puede seleccionar C ++ o deseleccionar Java , Fortran , etc. Dado que crosstool-ng es solo un conjunto de scripts y archivos de parches, es muy raro que una compilación de desarrollo rompa cosas. Siempre puedes sacar del repositorio de hg .

clon hg http://crosstool-ng.org/hg/crosstool-ng
cd crosstool-ng
./oreja
hacer
sudo make install

Esto tendrá las últimas correcciones. He desarrollado compilaciones cruzadas de brazo con soporte C ++ muchas veces usando este método [incluyendo cruces canadienses para Mingw e i386 de un host x86_64].

EDIT: veo que el enlace wordpress recomienda una instalación local de ct-ng . Los comandos anteriores realizan una instalación completa, colocando las cosas en / usr / local . Además, parece que el OP intentó establecer la opción C ++ de menuconfig. Intente modificar el valor sjlj , use la última versión de ct-ng e instálelo. Esto produce un compilador cruzado ARM Linux C ++ en Ubuntu para mí. La salida build.log puede ser útil para determinar si ct-ng decidió que alguna configuración era imposible.

Finalmente, la lista de correo [email protected] no requiere suscripción afaik. Los archivos en http://sourceware.org/ml/crossgcc/ pueden ser útiles. Si todavía tiene problemas, estoy seguro de que alguien en la lista de correo podrá ayudarlo.

EDITAR: con el último ct-ng instalado, intente,

$ ct-ng arm-cortex_a15-linux-gnueabi #Alternate arm-yem-linux-gnueabi
$ ct-ng menuconfig # Tweak para su procesador, versión de gcc, etc.
$ ct-ng build # Vaya a tomar un café (o trabaje en otra cosa).

Lo sentimos, su compilador de host se hizo con Linaro. Estaba leyendo demasiado en tu edición.


Si todavía está buscando una respuesta para compilar c ++ en la plataforma de brazo:

Instalar crosstool-ng:

tar xjf <ct-ng archive> cd crosstool-ng-<numversion> # reset of LD_LIBRARY_PATH is required to avoid issues with crosstool-ng unset LD_LIBRARY_PATH ./configure prefix=<installDir> #example ./configure prefix=/opt/cross-rpi make make install #required to make sure you get the right on in case export PATH=<installDir>/bin:$PATH #check what version is on now. which ct-ng

Ahora crea e inicia la configuración:

mkdir chain-build #the directory hosting the build files of your cross compil chain cd chain-build ct-ng menuconfig

Las opciones de configuración son relevantes para la plataforma de brazo entre otras:

Rutas y opciones misceláneas

  • Configure el nivel de registro máximo para ver a WARN en lugar de INFO, lo que enreda los registros y, en mi opinión, los hace difíciles de usar, demasiado ruido para el caso de uso habitual.

Opciones de destino Sistema operativo

  • Arquitectura de destino

    • brazo
  • Sistema

    • linux

Utilidades binarias : seleccione la última versión de binutils

Compilador C

  • GCC: Seleccione Mostrar versiones de linaro y luego seleccione la última versión de linaro gcc (más estable que no linaro, de la experiencia)

  • C ++: compruébalo

Ahora construye tu cadena de herramientas

ct-ng build # once done check the content of the bin dir ls <yourChainInstallDir>/x-tools/arm-unknown-linux-gnueabi/bin

Deberías obtener algo como esto:

de todos para compilar el código de C ++, solo deberías necesitar g ++. Para verificar si g ++ (para el brazo) funciona bien, escriba

arm-unknown-linux-gnueabi-g++ -v

Deberías obtener algo similar a esto:

Using built-in specs. COLLECT_GCC=x-tools/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-g++ COLLECT_LTO_WRAPPER=/opt/cross1.19/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm- unknown-linux-gnueabi/4.8.2/lto-wrapper Target: arm-unknown-linux-gnueabi [...] blahblah [...] gcc version 4.8.2 20130603 (prerelease) (crosstool-NG 1.19.0)

Una vez que recibas este mensaje deberías estar bien.

La única otra cosa a tener en cuenta es si tiene todas las bibliotecas necesarias para compilar su código.

por ejemplo, en Raspberry-pi (usando Raspbian), algunas de las libs deben importarse manualmente desde / lib y / usr / lib (poner luego en su LD_LIBRARY_PATH).

A veces los includes para gcc o g ++ no se copian en el directorio de inclusión de toolchain (cuando se usa crosstool-ng, se soluciona el problema un par de veces), por lo que debe obtener los includes de su directorio / usr / include.


Estaba teniendo un problema similar. Resulta que estaba buscando en el directorio bin incorrecto en .build . La versión final de la cadena de herramientas se instaló en ~/x-tools lugar ...