Respuestas:
Como se señaló en esta publicación de blog y aludido en los Términos de configuración de GCC , --target
solo se aplica cuando compila cadenas de herramientas. Cuando realiza una compilación cruzada normal de una biblioteca o binario que utiliza
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Sin embargo, cuando está creando cadenas de herramientas, las cosas pueden volverse más complicadas. Creo que lo siguiente es correcto (aunque no puedo decir que haya compilado manualmente un depurador cruzado):
Digamos que tienes:
Configurar y construir su servidor de depuración (por ejemplo, gdbserver) para que se ejecute en su dispositivo integrado con
./configure --build=powerpc --host=mips
para que pueda poner masilla en su dispositivo integrado y ejecutar "gdbserver: 1234 a.out" para comenzar a depurar y escuchar en el puerto 1234.
Luego construiría su cliente de depuración (que se conecta y controla el gdbserver) con
./configure --build=powerpc --host=i686 --target=mips
que copiarías a tu computadora portátil x86 para que en el campo puedas ejecutar "gdbclient embedded.device: 1234" para depurar tu programa a.out.
Todo esto también se aplica a los compiladores para los que es posible que desee consultar el enlace de GCC anterior o esta sección sobre la compilación cruzada canadiense .
También tenga en cuenta que, en la práctica, es posible que no vea especificación de compilación, host o destino porque, de acuerdo con esta página del manual de Autoconf , "el objetivo predeterminado es host, host para compilar y compilar según el resultado de config.guess".
En una palabra, compile el código --build
, ejecútelo --host
con el --target
entorno de arquitectura.
Nota: El argumento --target
solo tiene sentido cuando se compila el compilador (por ejemplo, GCC). Cuando se ejecuta configure
antes de construir GCC:
--build
: la máquina en la que está construyendo--host
: la máquina para la que está construyendo--target
: la máquina que GCC producirá binario paraDe la documentación de GCC ( notas de instalación específicas de Host / Target ):
Si build, host y target son todos iguales, esto se llama nativo. Si build y host son iguales pero el objetivo es diferente, esto se llama una cruz. Si la construcción, el anfitrión y el objetivo son diferentes, esto se llama canadiense (por razones oscuras que tratan con el partido político de Canadá y los antecedentes de la persona que trabaja en la construcción en ese momento). Si el host y el destino son iguales, pero la compilación es diferente, está utilizando un compilador cruzado para compilar un nativo para un sistema diferente. Algunas personas lo llaman host-x-host, nativo cruzado o nativo cruzado. Si compilación y destino son iguales, pero el host es diferente, está utilizando un compilador cruzado para construir un compilador cruzado que produzca código para la máquina en la que está construyendo. Esto es raro, por lo que no hay una forma común de describirlo. Hay una propuesta para llamar a esto un retroceso.
--target
que no es relevante para ningún proyecto que no sea en sí mismo un compilador. Entonces, ¿por qué es una opción de configuración estándar? Confuso.
configure
no es exactamente un pináculo del diseño bueno y limpio; Supongo que es solo el resultado del deslizamiento de características específicas de la aplicación.
--host
y--build
. Tengo dos proyectos en C ++ y es imposible compilar para Android porque Autotools está muy jodido. Insiste en ejecutar pruebas utilizando la cadena de herramientas del host.