Visual C++: linux binary?
Nico
- programmiertechnik
0 stareagle0 Nico0 Der Martin
Hi,
sorry, falls das eine blöde Frage ist; aber mich würde brennend interessieren, ob man mit Visual C++ Projekte, die z.B. nur die Standardbibliotheken und gtk libs verwenden, "einfach so" für Linux kompilieren kann, damit es dort ausführbar ist?
Das hätte den Vorteil, dass nicht wieder die vielen vielen Parameter für gcc zusammengesammelt werden müssten und ich jedesmal alles auch mit dem 2. Compiler testen muss, obwohl ich vom einen weiß, dass es ohne großes Zutun schon klappt. Die Anwendungen sollten eigentlich ziemlich kompatibel sein, nachdem gtk und die Standardlibs ja eigentlich auf beiden Betriebssystemen gleichermaßen vorhanden sein sollten. In einer Binary, die alles enthält, wäre natürlich noch handlicher, wenn auch nicht das effizienteste.
Danke für Tipps
Hallo,
sorry, falls das eine blöde Frage ist; aber mich würde brennend interessieren, ob man mit Visual C++ Projekte, die z.B. nur die Standardbibliotheken und gtk libs verwenden, "einfach so" für Linux kompilieren kann, damit es dort ausführbar ist?
Nein, das geht (leider) nicht. Windows und Linux verwenden ein unterschiedliches Binärformat für Programme (sprich die ausführbaren Dateien müssen anders aufgebaut sein). Siehe auch http://de.wikipedia.org/wiki/Executable_and_Linking_Format
Das hätte den Vorteil, dass nicht wieder die vielen vielen Parameter für gcc zusammengesammelt werden müssten und ich jedesmal alles auch mit dem 2. Compiler testen muss, obwohl ich vom einen weiß, dass es ohne großes Zutun schon klappt.
Der umgekehrte Weg geht aber: Du kannst deine Windowsprogramme auch mit dem gcc kompilieren. Das ganze heißt MinGW und ist eine Portierung des gcc auf Windows. Dazu gehört auch noch Portierung der Bourne Shell, damit auch die ganzen netten GNU Build Tools wie make, autoconfig und automake laufen. Die damit kompilierten Programme laufen dann auch ohne MinGW.
Die Anwendungen sollten eigentlich ziemlich kompatibel sein, nachdem gtk und die Standardlibs ja eigentlich auf beiden Betriebssystemen gleichermaßen vorhanden sein sollten. In einer Binary, die alles enthält, wäre natürlich noch handlicher, wenn auch nicht das effizienteste.
Leider unterscheiden sich meines Wissens die Standardbibliotheken von MS Compiler und die des gcc auch in einigen Punkten.
Gruß
Jens
Hi,
dann muss ich wohl doch auf gcc umsteigen.
Leider hast Du recht damit, dass die libs nicht die selben sind (vom Umfang her etc.).
Zumindest hat gcc gleich mal jede Menge Fehler ausgegeben, obwohl ich ja "nur" die string, stringstream und time.h verwende, die Betriebssystem-spezifisch ist.
Hoffe mal, ich finde äquivalente Bibliotheken für meine Zwecke.
Danke für deine Antwort!
Cu
Hi,
sorry, falls das eine blöde Frage ist; aber mich würde brennend interessieren, ob man mit Visual C++ Projekte, die z.B. nur die Standardbibliotheken und gtk libs verwenden, "einfach so" für Linux kompilieren kann, damit es dort ausführbar ist?
das ist *überhaupt keine* blöde Frage, im Gegenteil: Sie ist sehr sinnvoll und vernünftig.
Nein, das geht (leider) nicht. Windows und Linux verwenden ein unterschiedliches Binärformat für Programme (sprich die ausführbaren Dateien müssen anders aufgebaut sein).
Klar, aber theoretisch könnte man trotzdem denselben Compiler verwenden. Wenn man es ganz genau nimmt, macht ja erst der Linker aus den Object-Dateien das, was das Betriebssystem nachher direkt als "ausführbare Datei" akzeptiert.
Das Problem dürfte eher sein, dass das Object-Format nicht standardisiert ist die Compilerhersteller da alle ein ähnliches Prinzip, aber im Detail ein ganz anderes Format verwenden. Man bräuchte also einen Linker, der das Microsoft-Object-Format liest und daraus Linux-taugliche ELFs erzeugt. Ich glaube aber nicht, dass es einen solchen Linker gibt.
Das hätte den Vorteil, dass nicht wieder die vielen vielen Parameter für gcc zusammengesammelt werden müssten und ich jedesmal alles auch mit dem 2. Compiler testen muss, obwohl ich vom einen weiß, dass es ohne großes Zutun schon klappt.
Es hätte auch den Vorteil, dass man mit einem vertrauten Entwicklungssystem arbeiten kann und trotzdem Code für unterschiedliche Plattformen erstellen kann.
Der umgekehrte Weg geht aber: Du kannst deine Windowsprogramme auch mit dem gcc kompilieren. Das ganze heißt MinGW und ist eine Portierung des gcc auf Windows. Dazu gehört auch noch Portierung der Bourne Shell, damit auch die ganzen netten GNU Build Tools wie make, autoconfig und automake laufen. Die damit kompilierten Programme laufen dann auch ohne MinGW.
Ich kann mir aber nicht vorstellen, dass MinGW auch bestehende Projekte, die auf MS Wuschel Studio ausgelegt sind, interpretieren und korrekt weiter verarbeiten kann. Dazu sind vermutlich eine Menge Anpassungen nötig.
Allerdings können viele Entwicklungsumgebungen mit den Kommandozeilen-Versionen beliebiger Compiler/Linker anstatt ihrer eigenen arbeiten. Ich weiß nicht, ob MSVS das kann, aber wenn, dann könnte man auch hier mit der vertrauten Umgebung weiterarbeiten, während im Hintergrund ein gcc/MinGW werkelt und das Projekt mal für Windows, mal für Linux übersetzt.
Reine Theorie - aber immerhin vorstellbar.
So long,
Martin