Como usar o meu compilador cruzado para compilar alguma coisa?

1

Eu informei sobre compilação cruzada e encontrei muitas informações sobre como criar uma, mas muito pouca informação sobre como usá-la.

Eu gostaria de compilar a ferramenta bluez-utils-3.36 de este site com meu próprio compilador. Eu encontrei o compilador cruzado (arm-linux-gcc-4.4.3.tgz) em este site . Minha versão do gcc é 4.4.3, então eu suponho que esta é a correta.

Máquina host (máquina na qual eu construo o código)

Processor: Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz
OS Version: Linux 2.6.32-44 generic

Máquina de destino: (o destino no qual o arquivo compilado deve ser executado)

Processor: ARM926EJ-S rev 5 (v5l)
OS Version: Linux 2.6.35.3-571

Como posso usar esse novo compilador para compilar bluez-utils-3.36 ?

    
por Black 24.08.2015 / 15:08

3 respostas

3

Existe um esquema de nomenclatura padrão do GNU para compiladores e outras partes do conjunto de ferramentas:

<target triplet>-<tool name>

A tripla alvo tem o formato

<machine>-<vendor>-<operatingsystem>

E o nome da ferramenta é gcc para o compilador ou outro nome de ferramenta como ld ou strip ou ar , etc ...

O compilador padrão, aquele que compila os binários nativos (não é um compilador cruzado) é chamado apenas como gcc sem o tripleto.

O trio do compilador que está dentro do arquivo que você mencionou na sua pergunta é arm-none-linux-gnueabi (parece um quadrupleto, eu sei, mas é o que é). Então, para usá-lo, basta chamar arm-none-linux-gnueabi-gcc em vez de simples gcc .

Se você está construindo algo que usa Makefile , muitas vezes você pode obter que Makefile use o compilador desejado executando CC=arm-none-linux-gnueabi-gcc make em vez de make . Se você está construindo algo que usa um script GNU configure , você pode especificar o trio alvo para isso também .

    
por 24.08.2015 / 16:14
1

Mais do que um compilador cruzado, o que você precisa é de uma toolchain , pois há mais etapas que envolvem o processo de Obtendo um executável fora do código-fonte. Estas etapas são

  1. Compile (código-fonte para o assembler)
  2. Montar (código assembler para código de máquina)
  3. Link (rotinas e bibliotecas no código de máquina vinculadas)

O padrão de nomenclatura nos toolbars GNU é <target>-<tool> , por exemplo arm-oe-linux-gnueabi-gcc seria o compilador para uma arquitetura ARM, variante Open Embedded Linux, enquanto arm-oe-linux-gnueabi-as é o montador da mesma cadeia de ferramentas e assim por diante. / p>

No entanto, isso não é tudo o que você precisa obter do código-fonte no host para o executável para a máquina de destino. Você também precisa dos cabeçalhos e bibliotecas da máquina de destino na máquina host para o vinculador. É por isso que você teve esse erro de compilação "não foi possível ler os símbolos. Arquivo no formato errado". É claro, assim que você tiver os cabeçalhos e o sysroot e tudo copiado em sua máquina host, você precisará definir as variáveis correspondentes para o compilador cruzado para encontrar as corretas, e não o original da sua máquina host.

Em geral, os pacotes fonte contêm um Makefile preparado para aceitar um compilador específico. Vendo de comentários anteriores, eu percebi que você resolveu muito usando a variável CC =. Assim que tiver tudo pronto, basta alterar o CC do seu Makefile e chamar make .

Então, para encurtar a história, você precisa criar seu próprio conjunto de ferramentas para sua máquina de destino em sua máquina host ou obter uma já construída.

Boa sorte e divirta-se!

    
por 26.08.2015 / 16:24
1

O host é a máquina na qual você está compilando. Sua máquina de desenvolvimento.
O alvo é a máquina ARM926EJ-S.
Um par de coisas a observar:
ARM926EJ-S é um ARMv5, certifique-se de que sua cadeia de ferramentas cruzadas compila a versão correta do processador de braço.
O diretório de instalação chamado no arquivo make:
INSTALAR = / usr / bin / install -c
Eu acho que isso vai instalar em sua máquina host (desenvolvimento), não o que você quer.
Se você está compilando isto para um dispositivo embutido, você precisará criar um diretório 'workingInstall' para instalar o bluez. Em seguida, adicione isso ao seu sistema de arquivos incorporado. (nand, cartão SD).

    
por 26.08.2015 / 19:04