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 ...