paulo1205
(usa Ubuntu)
Enviado em 16/06/2015 - 12:53h
Gabrielz escreveu:
Bom, como sabemos, o Linux e os sistemas do tipo Unix ostentam ao sistema operacional da Microsoft os tão famosos compiladores C/C++ (e acho que tem mais linguagem de programação) GCC/G++, do GNU.
Eu não sei se o ostentam. Sei que o usam.
Mas não se usa apenas o GCC. O mundo de computação científica, por exemplo, gosta muito do compilador da Intel (C, C++ e Fortran), mesmo no Linux. Dizem, inclusive aqui na empresa em que trabalho, que ele não apenas compila mais rapidamente que o GCC, mas também que produz código mais eficiente.
Lendo um pouco na rede mundial de computadores, descobri que há uma coisa mística por trás destes "bichinhos criadores de binários". ELES SÃO CROSS-COMPILE! Isto quer dizer que, é possível compilar para várias plataformas. Quando dou, por exemplo, um "g++ projeto.c", gero um binário para a Ubuntu-family. Tem como eu configurar o GCC/G++ para compilar ao Linux de forma geral ou ao Windows?
O GCC pode ser usado como
cross compiler, mas creio que seu uso majoritário é como compilador nativo.
"Linux de forma geral" depende do que você chama de "forma geral". Se você tem compila um programa no seu Ubuntu com amd64, é provável que o mesmo executável execute num Red Hat, Slackware ou Mandriva, desde que eles estejam também executando com arquitetura amd64 e que tenham bibliotecas dinâmicas compatíveis com as que você usou na hora de gerar seu executável. Se você usar apenas bibliotecas estáticas, a chance de compatibilidade é maior ainda. Entretanto, se você tentar executar o mesmo executável num Linux, sim, mas usando outra arquitetura, tal como ARM, Power ou Sparc, é evidente que não vai funcionar.
Para compilar programas para outro SO, não basta ter um compilador capaz de gerar código binário ou Assembly do processador usado nesse SO. É preciso também ter um ambiente de suporte a esse SO. Por exemplo: se eu quiser compilar programas para Solaris/Sparc a partir de um Linux/amd64, eu tenho, sim, de ter um
cross compiler para Sparc, mas tenho também de ter as bibliotecas, os arquivos de definição de interfaces nativas do SO (incluindo os arquivos de cabeçalhos que normalmente residem em
/usr/include) e algumas ferramentas de apoio, como assembler, linker, indexadores, programas que exportem ou importem tabelas de símbolos etc.
No caso específico de gerar código para Windows a partir do Linux, o Ubuntu, por exemplo, tem pacotes do MingW. Eu só não sei quão elaborado poderá ser um programa compilado com essas ferramentas, pois acho improvável que os pacotes incluam bibliotecas nativas da Microsoft que permitam recursos mais especializados e avançados.