2008-10-08 6 views
38

Gibt es ein Handbuch zum Cross-Compiling einer C++ - Anwendung von Linux auf Windows?Handbuch zum Cross-Compilieren einer C++ - Anwendung von Linux auf Windows?

Nur das. Ich hätte gerne Informationen (Links, Referenzen, Beispiele ...), die mich dazu bringen, das zu tun.

Ich weiß nicht einmal, ob es möglich ist.

Mein Ziel ist es, ein Programm in Linux zu kompilieren und eine .exe-Datei zu erhalten, die ich unter Windows ausführen kann.

Antwort

51

Die Grundlagen sind nicht allzu schwer:

sudo apt-get install mingw32  
cat > main.c <<EOF 
int main() 
{ 
    printf("Hello, World!"); 
} 
EOF 
i586-mingw32msvc-cc main.c -o hello.exe 

ersetzen apt-get mit yum, oder was auch immer Ihre Linux-Distribution verwendet. Das wird hello.exe für Windows generieren.

Sobald Sie Ihren Kopf herumkommen, dass, könnten Sie autotools, verwenden und CC=i586-mingw32msvc-cc

CC=i586-mingw32msvc-cc ./configure && make 

Oder nutzen CMake and a toolchain file den Build zu verwalten. Noch schwieriger ist es, native Cross-Bibliotheken hinzuzufügen. Normalerweise werden sie in /usr/cross/i586-mingw32msvc/{include,lib} gespeichert und Sie müssen diese Pfade im Konfigurationsschritt des Erstellungsprozesses separat hinzufügen.

+1

Eine Sache, mit diesem zu beachten ist, dass einige Bibliotheken nicht gerne Cross-Kompilierung. Wenn Sie nur ein .exe-Installationsprogramm und eine Quelle auswählen, sollten Sie die Bibliothek unter "wine" installieren und dann die Bibliotheken und Header in Ihren mingw-Suchpfad kopieren. Ich könnte Boost nie dazu bringen, Cross-Compiling zu machen. – Branan

+0

Würde es Ihnen etwas ausmachen, mir zu zeigen, wie ich ein solches kompiliertes Programm mit Wine testen kann? – NawaMan

+5

'Wein hallo.exe' sollte es tun! – richq

4

Es hängt davon ab, was du meinst (ich konnte nicht wirklich sagen).

  1. Wenn Sie meinen, dass Sie eine vorhandene Linux-Anwendung unter Windows verwenden möchten, dann können Sie versuchen, es Cygwin unter Windows mit kompilieren. Dies gibt Ihnen jedoch keine ausführbare Windows-Datei, die frei von allen Abhängigkeiten zu Cygwin ist (Ihre ausführbare Datei hängt immer noch von der cygwin.dll-Datei ab) - und es muss noch etwas portiert werden, bevor es funktioniert. Siehe http://www.cygwin.com.

  2. Wenn Sie meinen, dass Sie in der Lage sein, die eigentliche Kompilierung einer Windows-Anwendung unter Linux durchzuführen und eine .exe-Datei zu erzeugen, die auf Windows ausführbar ist - also Ihre Linux-Box zur Entwicklung und/oder Kompilierung verwendet sollte in MinGW für Linux, das ein Tool für Crosscompiling für Windows unter Linux ist. Siehe http://www.mingw.org/wiki/LinuxCrossMinGW.

Mit freundlichen Grüßen!

4

Ich schlage vor, geben Sie die folgenden, GUB (Grand Unified Builder) einen Versuch, wie es mehrere Pakete mit ihren Abhängigkeiten cross-kompiliert und fügt sie in einem einzigen Installationspaket für derzeit 11 Architekturen. Sie können eine vorkompilierte iso für die Installation in einer VM von here herunterladen und der Quelle here folgen. Es kann derzeit verwendet werden, um GNU LilyPond/GNU Denemo/Inkscape und OpenOffice.org zu kompilieren.

Die Zielarchitekturen sind:

  • Darwin-ppc - tar.bz2 Datei für Darwin 7 (MacOS 10.3)/PowerPC
  • Darwin-x86 - tar.bz2 Datei für Darwin 8 (MacOS 10.4)/x86
  • mingw - mingw ausführbare Datei für Windows32
  • Linux-x86 - shar Archiv für Linux/x86
  • linux-64 - shar Archiv für Linux/x86_64
  • linux-ppc - shar Archiv für Linux/PowerPC
  • FreeBSD-x86 - shar Archiv für FreeBSD 4/x86
  • FreeBSD-64 - shar Archiv für FreeBSD 6/x86_64
  • cygwin - .tar.bz2 Pakete für Cygwin/Windows32
  • Arm - shar Archiv für Linux/ARM (weitgehend ungetestet)
  • debian - shar Archiv für Debian (weitgehend ungetestet)