Cross-compiler C ++ da Windows a Linux

Ci sono strumenti facili da usare per compilare cross-line da Windows a Linux?

crosstool-ng supporta la creazione di cross-compilatori con l’host cygwin .

Panoramica:

  • Installa Cygwin, con pacchetti di sviluppo
  • Scarica crosstool-ng
  • Estrai il tarball ( tar xvjf crosstool-ng* )
  • Esegui ./configure
  • Quando configure si lamenta di uno strumento mancante, torna alla configurazione di cygwin e installa il pacchetto corrispondente (es. flex , libtool , ncurses-devel ) Avrai bisogno almeno di quanto segue:
    • Devel / gperf
    • Devel / bisonte
    • Devel / byacc
    • Devel / wget
    • Devel / patch
    • Devel / make (versione GNU)
    • Devel / automake 1.10+
    • Libs / libncursesw10
    • Libs / libncursesw10-devel
  • make
  • make install
  • Crea una nuova directory per creare il cross-compiler, ad esempio /usr/src/cross-linux-gnu-root
  • Abilita il supporto della distinzione tra maiuscole e minuscole nel registro di sistema (consulta https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-the-the- filesystem # answer-842670 )
  • Montare la directory case-sensitive (es. mount c:/cygwin/usr/src/cross-linux-gnu-root /usr/src/cross-linux-gnu -o binary,posix=1 )
  • Dall’interno della directory di compilazione del cross-compilatore, ct-ng menuconfig
  • Nei menu, impostare l’architettura di destinazione su x86 (probabilmente) e sottoarchitettura in i686 (evita i problemi di GCC 4.8 , grazie osm0sis), indirizzare il kernel a linux e indirizzare la libreria C a glibc e abilitare il compilatore C ++.
  • Per ovviare a problemi di 4.0 , abilitare anche EXPERIMENTAL in Paths and misc options quindi, andare in Companion tools (al livello superiore) e abilitare Build some companion tools e quindi make 3.81 (Grazie osm0sis)
  • wget ha problemi con gli ultimi certificati di kernel.org, quindi usa il metodo .wgetrc in questa risposta accettata: Come posso correggere gli errori dei certificati quando eseguo wget su un URL HTTPS in Cygwin? (Grazie osm0sis)
  • Attualmente sono necessarie 3 patch di file per evitare ulteriori errori:
    • l’errore _libintl_gettext come menzionato nei commenti
    • le intestazioni di byteshift e
    • le intestazioni ELF (Grazie Duncan Calvert & osm0sis)
  • ct-ng build

Ovviamente, questo NON ti consentirà di creare applicazioni linux da Visual Studio. (VS2010 e versioni successive consentono di creare con altri toolchain come gcc, ma è necessaria una descrizione della toolchain appropriata oltre al cross-compilatore creato da crosstool-ng). Ma avrai un g++-linux-gnu , che puoi eseguire direttamente o usare un Makefile.

NOTA: la compilazione del cross-compiler richiede molto tempo. osm0sis ha fornito qui un gcc 4.8.1 precostruito, insieme alle sue note sulla costruzione del cross-compiler (usato per aggiornare questa risposta).

La soluzione migliore è utilizzare un IDE multipiattaforma come Code :: Blocks in grado di importare progetti MSVC e generare un Makefile per Linux, che è ansible eseguire su Linux (con lo stesso programma, se lo si desidera).

Quindi il tuo stream di lavoro sarebbe quindi simile al seguente:

 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 

È un po ‘ottuso, probabilmente, ma almeno Code :: Blocks si prende cura di molti piccoli dettagli con cose come Makefile, e cosa no.

Stai chiedendo qualcosa che possa prendere il codice scritto per essere eseguito su Windows e farlo funzionare su Linux? Non c’è davvero un compilatore che lo faccia – ma forse stai cercando Wine ( http://www.winehq.org/ ) che ti permette di eseguire app di Windows su linux (se usano le API Wine si è schiantato).

Modifica: presumo che il tuo codice utilizzi le API di Windows (Win32, ecc.) In questa risposta. Se usi solo standard C ++ e le librerie sono disponibili su più piattaforms, allora ci sono molte altre risposte.

Non credo ci siano compilatori che ti permettono di compilare su Windows e quindi prendere il binario risultante ed eseguirlo su una macchina Linux. La soluzione migliore è impostare due ambienti di sviluppo, uno su Windows e uno su Linux. Esegui la maggior parte del tuo sviluppo e del debugging nell’ambiente Windows, se questo è quello che fa per te, quindi compila e test frequentemente su Linux per assicurarti che il tuo codice sia veramente multipiattaforma. Dovrai anche utilizzare un sistema di compilazione multipiattaforma e un framework di test. Raccomando rispettivamente l’uso di cmake e Google Test .

Compilare a Linux da Windows senza utilizzare la virtualizzazione o il cross compilatore, ma solo nativamente tramite coLinux
Crea file eseguibili Linux nativi senza lasciare (riavviare) Windows.
Compilazione C / C ++ per Linux sotto Windows tramite Cooperative Linux
Il passaggio più veloce tra Windows e Linux tramite ALT-TAB (non è necessario riavviare o riavviare).

1.Installare coLinux ( http://sourceforge.net/projects/colinux/files/latest/download?source=files )
2.Utilizzare l’immagine del file system root di CoLinux: Ubuntu-9.04-1gb.7z ( http://sourceforge.net/projects/colinux/files/Images%202.6.x%20Ubuntu/Ubuntu%209.04/ )
3. avviare coLinux
4.cambiare stringa “archive.ubuntu.com” su “old-releases.ubuntu.com” con:
shell> sudo vi /etc/apt/sources.list
5.Aggiorna la tua configurazione:
shell> sudo apt-get update
6. Installa due pacchetti software per poter compilare i tuoi programmi:
shell> sudo apt-get install build-essential
(c / c ++, compilatori gcc)
shell> sudo apt-get install libmysqlclient15-dev
(mysql dev 5.1)
7. Accedere alle directory di Windows da CoLinux
shell> mount cofs0 / mnt / -t cofs
shell> cd / mnt
8.Compilare
shell> c ++ your.source.cc -o executable.name