Systemübergreifend kompilieren möglich?
-
Hallo Forum,
ich stelle mir die Frage, ob es möglich ist, ANSI-Code für andere Systeme zu kompilieren.
Um genau zu sein habe ich keine Windowsinstallation (und auch keine Lizenz) und würde gerne Versionen für Win32 oder Win64 kompilieren.
Ist das mit GCC möglich? Kennt ihr dafür irgendwelche Anleitungen oder Tutorials?
-
Ist möglich, aber recht kompliziert. Das nennt sich Crosscompiling. Wenn es irgendwie möglich ist, es zu vermeiden, empfehle ich die Vermeidung.
-
Hm. Danke, SeppJ, für die Antwort. Das ist nicht gerade ermutigend
Ich habe leider überhaupt keine Ahnung, wie man unter Windows kompiliert - kann es wirklich leichter sein, Windows zu erwerben, aufzusetzen, Compiler zu installieren, Libraries einzurichten und komplett neue Compilescripte zu schreiben als einen Crosscompiler zu benutzen?
Ich habe von Cygwin und MinGw gelesen, die man unter Linux nutzen könnte, werde allerdings aus den Spezifikationen nicht ganz schlau. Kann ich damit denn auch Code mit Boost/MPI/OpenMP etc. crosscompilieren oder müsste ich dazu wirklich die Windows-Installation machen?
-
NacMacNeedle schrieb:
Hm. Danke, SeppJ, für die Antwort. Das ist nicht gerade ermutigend
Ich habe leider überhaupt keine Ahnung, wie man unter Windows kompiliert - kann es wirklich leichter sein, Windows zu erwerben, aufzusetzen, Compiler zu installieren, Libraries einzurichten und komplett neue Compilescripte zu schreiben als einen Crosscompiler zu benutzen?
Meiner Meinung nach: Ja.
Ich habe von Cygwin und MinGw gelesen, die man unter Linux nutzen könnte, werde allerdings aus den Spezifikationen nicht ganz schlau. Kann ich damit denn auch Code mit Boost/MPI/OpenMP etc. crosscompilieren oder müsste ich dazu wirklich die Windows-Installation machen?
Ja, das ist möglich ohne Windows. Aber mit dem Kommentar von oben, dass es wirklich kompliziert ist. Du kannst ja mal anfangen und versuchen "hello world" für Windows hin zu bekommen und gucken, wie weit du kommst (ein Testrechner mit Windows drauf wäre zum abschließenden Testen gut). Wenn du das schaffst, dann sind Programme mit Boost/MPI/OpenMP nicht großartig anders.
-
Öhm, so kompliziert ist das eigentlich gar nicht. Wenn du die Cross-Toolchain erstmal eingerichtet hast, ist es sogar kinderleicht.
Das tolle ist, dass du die Toolchain und die Librarys ja nicht unbedingt selbst kompilieren musst. Distributionen wie Fedora haben eine komplette, aktuelle MinGW-basierte Crosscompile-Toolchain (jeweils für i386- und x86-64-Windows) in den Repos. Noch viel interessanter (da in der Erstellung je nach Buildsystem der jeweiligen Lib mit deutlich mehr Aufwand verbunden) ist allerdings die große Auswahl an Librarys, die bei Fedora fertig paketiert für die Crosscompile-Nutzung existieren.
Von Standardsachen wie Zlib, Curl oder OpenSSL über Boost bis hin zu GUI-Zeug wie Qt und GTK+ findest du da eine nette Auswahl an Opensource-Librarys, fertig zur Nutzung.
Um ehrlich zu sein finde ich die Erstellung von Windows-Binarys unter Fedora bedeutend bequemer als unter Windows selbst.
Mehr als ein "yum install mingw{32,64}-libname" ist nicht nötig, anschließend kannst du sie ganz normal mit dem MinGW-Crosscompiler benutzen, wie du es auch mit den Linux-nativen Libs und dem System-GCC machen würdest.
Extrem nett imho. War auch nicht wenig Arbeit das ganze so hindernisfrei nutzbar zu machen. Unter anderen Distributionen gibt es das so AFAIK noch nicht. Zwar bieten die meisten anderen Distributionen auch einen Cross-MinGW an, die Auswahl an Librarys fehlt aber.
-
horsthannelorehansen schrieb:
Öhm, so kompliziert ist das eigentlich gar nicht. Wenn du die Cross-Toolchain erstmal eingerichtet hast, ist es sogar kinderleicht.
Dem kann ich nur zustimmen.
Ich habe GTK-Programme für Windows auf Linux (Debian) kompiliert.
Dafür habe ich die GTK Libs des Windows SDKs genutzt und den mingw, der sich per apt-get installieren ließ.
Das make-Skript musste nur um die entsprechenden Pfade, bzw. den Compiler-Aufruf angepasst werden, wenn ich ein Windows-Executable brauchte.
Das ganze wurde dann per smbclient auf einen Windows-Rechner kopiert, um es dort zu testen.
Das wäre sicherlich auch mit Wine gegangen.Es ist ein wenig Ausprobiererei, aber ich empfand es als erstaunlich leicht.