Compilador cruzado C ++ do Windows para o Linux

Existe alguma ferramenta amigável ao usuário para fazer a compilation cruzada do Windows para o Linux?

O crosstool-ng suporta a construção de cross-compilers com o host cygwin .

Visão geral:

  • Instale o cygwin, com pacotes de desenvolvimento
  • Baixar crosstool-ng
  • Extraia o tarball ( tar xvjf crosstool-ng* )
  • Execute ./configure
  • Quando o configure reclamar sobre uma ferramenta ausente, volte para a instalação do cygwin e instale o pacote correspondente (por exemplo, flex , libtool , ncurses-devel ). Você precisará pelo menos do seguinte:
    • Desenvolvimento / gperf
    • Desenvolvimento / bisonte
    • Desenvolvimento / byacc
    • Desenvolvimento / wget
    • Desenvolvimento / patch
    • Devel / make (versão GNU)
    • Desenvolver / automatizar 1.10+
    • Libs / libncursesw10
    • Libs / libncursesw10-devel
  • make
  • make install
  • Crie um novo diretório para construir o compilador cruzado, por exemplo /usr/src/cross-linux-gnu-root
  • Habilite o suporte à diferenciação de maiúsculas e minúsculas no registro do sistema (consulte https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the- sistema de arquivos # answer-842670 )
  • Monte o diretório com distinção entre maiúsculas e minúsculas (por exemplo, mount c:/cygwin/usr/src/cross-linux-gnu-root /usr/src/cross-linux-gnu -o binary,posix=1 )
  • De dentro do diretório de compilation do compilador cruzado, ct-ng menuconfig
  • Nos menus, defina a arquitetura de destino como x86 (provavelmente) e a subarquitetura como i686 (evita problemas do GCC 4.8 , obrigado osm0sis), direcione o kernel para o linux e a biblioteca C de destino para glibc e ative o compilador C ++.
  • Para solucionar problemas do 4.0 , também habilite o EXPERIMENTAL em Paths and misc options e, em seguida, Companion tools (no nível superior) e habilite o Build some companion tools e, em seguida, make 3.81 (Obrigado osm0sis)
  • O wget tem problemas com os certificados mais recentes do kernel.org, portanto, use o método .wgetrc nesta resposta aceita: Como corrijo erros de certificado ao executar o wget em um URL HTTPS no Cygwin? (Obrigado osm0sis)
  • Atualmente, três patches de arquivo são necessários para evitar mais erros:
    • o erro _libintl_gettext como mencionado nos comentários
    • os headers byteshift e
    • os headers ELF (Obrigado Duncan Calvert & osm0sis)
  • ct-ng build

Naturalmente, isso NÃO permitirá que você crie aplicativos linux a partir do Visual Studio. (O VS2010 e posterior permitem que você construa com outros toolchains como o gcc, mas você precisaria de uma descrição de toolchain apropriada além do compilador cruzado construído pelo crosstool-ng). Mas você terá um g++-linux-gnu , que pode ser executado diretamente ou usando um Makefile.

NOTA: Construir o compilador cruzado leva um longo tempo. osm0sis forneceu um gcc 4.8.1 pré-construído aqui , junto com suas annotations sobre a construção do compilador cruzado (usado para atualizar essa resposta).

Sua melhor aposta é usar uma IDE de plataforma cruzada, como Code :: Blocks, que pode importar projetos MSVC, e gerar um Makefile para Linux, que você pode executar em um Linux (com o mesmo programa, se desejar).

Então, seu stream de trabalho seria semelhante ao seguinte:

 Code, Compile, and debug on MSVC -> import into Code::Blocks & generate Makefile -> test compile and debug with GCC -> copy to Linux with Code::Blocks -> test compile & debug on Linux 

É um pouco obtuso, provavelmente, mas pelo menos Code :: Blocks cuida de muitos desses pequenos detalhes com coisas como Makefiles, e quais não.

Você está pedindo algo que pode tomar código escrito para rodar no Windows e fazê-lo rodar no linux? Não existe realmente um compilador que faça isso – mas talvez você esteja procurando por Wine ( http://www.winehq.org/ ), que permite rodar aplicativos do Windows no linux (se eles usam APIs, o Wine tem zunido).

Edit: Estou assumindo que seu código está usando APIs do Windows (Win32, etc.) nesta resposta. Se você estiver usando apenas o Standard C ++ e as bibliotecas disponíveis em várias plataformas, há muitas outras respostas.

Eu não acredito que existam compiladores que permitam compilar no Windows e, em seguida, pegar o binário resultante e executá-lo em uma máquina Linux. Sua melhor aposta é configurar dois ambientes de desenvolvimento, um no Windows e outro no Linux. Faça a maior parte do seu desenvolvimento e debugging no ambiente do Windows, se é isso que combina com você, então compile e teste com frequência no Linux para ter certeza de que seu código é realmente compatível com várias plataformas. Você também desejará usar um sistema de compilation de plataforma cruzada e uma estrutura de teste. Eu recomendo usar o cmake e o Google Test , respectivamente.

Compilar para o Linux do Windows sem usar a virtualização ou o compilador cruzado, mas apenas de forma nativa via coLinux
Crie arquivos executáveis ​​nativos do Linux sem janelas de licença (reboot).
Compilação C / C ++ para Linux no Windows através do Linux cooperativo
A comutação mais rápida entre o Windows e o Linux por meio do ALT-TAB (não é necessário reinicializar ou reinicializar).

1.Instalar o coLinux ( http://sourceforge.net/projects/colinux/files/latest/download?source=files )
2.Utilize a imagem do sistema de arquivos raiz coLinux: Ubuntu-9.04-1gb.7z ( http://sourceforge.net/projects/colinux/files/Images%202.6.x%20Ubuntu/Ubuntu%209.04/ )
3. iniciar coLinux
4.change string “archive.ubuntu.com” para “old-releases.ubuntu.com” com:
shell> sudo vi /etc/apt/sources.list
5.Atualize sua configuração:
shell> sudo apt-get update
6.Instale dois pacotes de software para poder compilar seus programas:
shell> sudo apt-get install build-essencial
(c / c ++, compiladores gcc)
shell> sudo apt-get instala libmysqlclient15-dev
(mysql dev 5.1)
7. Acessando diretórios do Windows a partir do coLinux
concha> monte cofs0 / mnt / -t cofs
shell> cd / mnt
8.Compile
shell> c ++ your.source.cc -o executable.name