Preciso fazer uma compilação cruzada do meu programa quando meu destino é um arco de 64 bits. e host é um arco de 32 bits da família x86?

6

Eu tenho um cenário em que você meu host é: processador x86 de 32 bits
meu alvo é: processador x86 de 64 bits

Eu tenho algumas perguntas:

  • Eu quero saber se posso simplesmente compilar um programa no meu host usando o gcc disponível e executá-lo no alvo?
  • Eu preciso fazer uma compilação cruzada para x86 Processador de 64 bits? Se sim, como posso especificá-lo durante a compilação?
  • Preciso usar uma cadeia de ferramentas separada para compilação cruzada do programa?
por Sen 03.12.2010 / 11:41

2 respostas

5

Todos os processadores amd64 (isto é, 64 bits x64) podem executar binários x86 de 32 bits. Além disso, na maioria dos sistemas operacionais, você pode executar programas x86 em um sistema operacional amd64. Por isso, muitas vezes é possível implantar binários x86 em processadores amd64.

Se é desejável fazer isso é um assunto diferente. Os sistemas operacionais de 64 bits geralmente vêm com um conjunto restrito de bibliotecas de 32 bits, portanto, se o seu programa usar algumas bibliotecas incomuns, será mais fácil instalar um executável de 64 bits. Dependendo do seu aplicativo, pode haver ou não uma vantagem de desempenho para binários de 32 ou 64 bits.

Se você decidir implantar executáveis de 64 bits, precisará de um ambiente de compilações cruzadas para a arquitetura amd64 (a.k.a. x86_64) em execução em uma arquitetura x86. Isso significa tanto um compilador quanto bibliotecas estáticas para vincular.

Uma instalação do gcc pode compartilhar frontends e incluir vários backends. Mas muitas distribuições não vêm com ferramentas de desenvolvimento amd64 em plataformas x86, então você pode ter que obter o seu próprio (o gcc é bastante simples de compilar cruzadamente). O mesmo vale para as bibliotecas vincularem (obviamente, depois de ter o compilador, você pode recompilá-las a partir da origem).

Como exemplo, o Ubuntu 10.04 no x86 vem com uma versão “multilib” do gcc e um backend amd64, além de um pequeno conjunto de pacotes de desenvolvimento de 64 bits ( libc6-dev-amd64 Instale libc6-dev-amd64 http: / /bit.ly/software-small e pacotes dependentes e dependentes).

    
por 03.12.2010 / 21:05
3

sim, você pode: basta especificar as opções corretas do comnpiler e pronto. Você não poderá executar o binário resultante em seu host de 32 bits.

Eu acho que você precisa: CFLAGS = -m64 você também precisará definir LD_LIBRARY_PATH e semelhante aos cabeçalhos e bibliotecas de 64 bits de suas dependências.

stackoverflow tem um pergunta com mais respostas.

    
por 03.12.2010 / 12:25