O que você está pedindo, como Thomas Dickey postou, é um cross-compilador .
Eles não são difíceis de fazer, mas são muito tediosos para configurar e manter a configuração corretamente, porque há um lote de dependências no sistema de destino que devem ser contabilizados para construir um executável adequado.
Quais são algumas dessas dependências? Apenas fora do topo da minha cabeça:
- Primeiro, seu sistema de destino provavelmente a < em> ambiente hospedado para que seu compilador cruzado precise fornecer códigos / binários de inicialização executáveis para permitir que o sistema de destino realmente atinja a função
main()
.
- Há muitos detalhes definidos pela implementação no sistema de destino, como "Qual é o tamanho de
long
". Aqueles podem diferir, então você precisa, por falta de uma palavra melhor - a implementação alvo . Em geral, isso significa pelo menos todos os arquivos de cabeçalho do sistema de destino que são "parte da implementação". Determinar quais você precisa e quais você não é uma tarefa tediosa na melhor das hipóteses. Então pegue todos eles, certo? Bem, isso aumenta o número de dependências com as quais você precisa se preocupar.
- Então agora você pode compilar - mas você não pode ligar sem as bibliotecas de sistemas de destino (isso está relacionado ao # 1 acima, mas até mais é necessário). Embora, em teoria, você possa vincular apenas com as bibliotecas estáticas sistemas de destino e sem as bibliotecas dinâmicas de sistemas de destino, sem todas as bibliotecas que você não pode realmente tenha certeza de que o binário produzido pelo seu compilador cruzado não falhará com um erro de "símbolo faltando" quando você tentar executá-lo em seu sistema de destino.
Então, você precisa dos arquivos de cabeçalho, das bibliotecas e dos binários / código de inicialização do sistema de destino para criar um compilador cruzado - e, depois de configurá-lo, será necessário mantê-lo - se o sistema de destino for corrigido de forma a impactar seu compilador cruzado, você precisará replicar essas alterações em seu compilador. Como você determina que o patch "123456" ou RPM "abc" afeta seu compilador cruzado?
E eu provavelmente senti muita falta.
Deve ser bastante óbvio porque ninguém se incomoda com cross-compiladores onde o sistema alvo é algo que é fácil para criar uma instância de Linux / Solaris / Windows / BSD em hardware x86, e até mesmo porque quando o sistema de destino é algo mais difícil (como o Solaris no SPARC), quase todo mundo com a necessidade de compilar para esse alvo apenas compra algum hardware compatível de baixo custo para compilação.