Respostas:
Conforme observado nesta postagem do blog e mencionado nos Termos de configuração do GCC , --target
só se aplica quando você está compilando cadeias de ferramentas. Ao fazer uma compilação cruzada normal de uma biblioteca ou binário, você usa
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
No entanto, quando você está construindo toolchains, as coisas podem ficar mais complicado. Eu acho que o seguinte está correto (embora eu não possa dizer que já compilei manualmente um depurador cruzado):
Vamos dizer que você tem:
Você configuraria e construiria seu servidor de depuração (por exemplo, gdbserver) para executar no seu dispositivo incorporado com
./configure --build=powerpc --host=mips
para que você possa colar no dispositivo incorporado e executar "gdbserver: 1234 a.out" para iniciar a depuração e escutar na porta 1234.
Você criaria seu cliente de depuração (que se conecta e controla o gdbserver) com
./configure --build=powerpc --host=i686 --target=mips
que você copiava no seu laptop x86 para que, em campo, você pudesse executar "gdbclient embedded.device: 1234" para depurar o programa a.out.
Isso também se aplica aos compiladores para os quais você pode querer consultar o link do GCC acima ou esta seção sobre a compilação cruzada do Canadá .
Observe também que, na prática, talvez você não veja build, host ou destino especificado porque, de acordo com esta página de manual do Autoconf , "o padrão é o destino do host, o host a ser construído e o resultado do config.guess".
Em uma palavra, construa o código --build
, execute-o --host
com o --target
ambiente de arquitetura.
Nota: O argumento --target
só faz sentido ao criar o compilador (por exemplo, GCC). Ao executar configure
antes de criar o GCC:
--build
: a máquina em que você está construindo--host
: a máquina para a qual você está construindo--target
: a máquina que o GCC produzirá binário paraNa documentação do GCC ( notas de instalação específicas do host / destino ):
Se build, host e destino são todos iguais, isso é chamado de nativo. Se build e host forem iguais, mas o destino for diferente, isso será chamado de cruzamento. Se build, host e target são todos diferentes, isso é chamado de canadense (por motivos obscuros que lidam com o partido político do Canadá e o histórico da pessoa que trabalha na build naquele momento). Se o host e o destino forem iguais, mas a construção for diferente, você estará usando um compilador cruzado para criar um nativo para um sistema diferente. Algumas pessoas chamam isso de host-x-host, nativo cruzado ou nativo cruzado. Se build e target forem iguais, mas o host for diferente, você estará usando um compilador cruzado para criar um compilador cruzado que produz código para a máquina na qual está construindo. Isso é raro, portanto não há uma maneira comum de descrevê-lo. Existe uma proposta para chamar isso de crossback.
--target
não é relevante para nenhum projeto que não seja um compilador. Então, por que é uma opção de configuração padrão? Confuso.
configure
não é exatamente um pináculo do design bom e limpo; Eu acho que é apenas o resultado da fluência de recursos específicos de aplicativos.
--host
e--build
. Eu tenho dois projetos em C ++ e é impossível criar para o Android porque o Autotools está tão fodido. Ele insiste em executar testes usando a cadeia de ferramentas do host.