(C/C++) Wie erstellt man ausführbare Datei, die ausgeführt werden kann auf Windows-und Linux?
Ich bin neu in der Programmierung. Was weiß ich, ein Programm, das kompiliert, unter Linux sollte nicht in der Lage, um in Windows laufen. Wenn wir also möchten, führen Sie das gleiche Programm in beiden Plattform, die wir brauchen, um den Quellcode zu kompilieren, unter Plattform, und erstellen 2 verschiedene ausführbare Dateien.
Kurzem studiere ich den source code eines open-source, cross-Plattform Java-GUI-Anwendung. Ich bin überrascht zu finden, dass das backend-engine, die GUI-Anwendung ist eine kleine ausführbare Datei generierten C++ - codes. Egal, die Benutzer verwenden, dass die Anwendung in Windows oder Linux, die Java-GUI ruft die gleiche ausführbare Datei in den bin-Ordner.
Ich will einfach nur wissen, wie kann die ausführbare Datei unter Windows und Linux?
Ich interessiere mich auch für ein cross-Plattform Java-GUI-Anwendung mit einem C++ - Programm als Motor. Das C++ - Programm ist nur verfügbar für Linux nur. Ich ve wurde googeln für eine Weile und ich fand, dass ich Cygwin-Portierung auf Windows. Allerdings, wenn ich Cygwin, ich werde am Ende mit 2 verschiedenen ausführbaren Dateien.
Wie kann ich die kombinieren Sie die ausführbare Windows-Datei mit der Linux ausführbare Datei? Ist es möglich, erzeugen eine einzelne ausführbare Datei, die ausgeführt werden kann auf beiden Plattformen?
Dank.
- Es wäre sehr hilfreich zu wissen, welche open-source-Anwendung, die Sie studiert haben, so konnten wir sehen es als gut.
- Hallo Markus, vielen Dank. Sie können download der Anmeldung hier: xjperf.googlecode.com/files/jperf-2.0.2.zip.
- lbw.sourceforge.net
- Diese Frage: stackoverflow.com/questions/2082336/... ist die nächste Sache möglich
- Was ist JNI ? javablog.co.uk/2007/05/19/making-jni-cross-Plattform
- Es sei denn, Sie benötigen hohe Leistung, ähnlich wie Schildkröten, sollten Sie Java alle dem Weg nach unten. Auch gibt es ein paar CAD-Programme, die 1 JAVA-GUI, wählt zwischen Windows-und Linux-Dateien, die beide verteilt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Möglichkeit, über eine einzige native ausführbare Datei kompiliert C++ - Quellcode, der funktioniert auf verschiedenen Plattformen. Ich glaube nicht, dass Sie die gleiche ausführbare Datei läuft auf Windows und Linux, wie Sie in Ihrem zweiten Absatz.
Ist die einfache Antwort ist, dass Sie nicht können.
PE (Windows) und ELF (Linux) binäre ausführbare Formate sind völlig Verschieden.
Nicht zu erwähnen, dass eine C/C++ - Programm erfordert die Verknüpfung von Bibliotheken, die nicht verfügbar sind, auf jeder Plattform gleichzeitig.
Jedoch, könnten Sie mit Wine auf Linux zum ausführen der ausführbaren Windows-Datei bereitstellen, die er versucht nicht, die exotischen Windows-spezifische Aufrufe.
Oder Sie können wählen, um eine "gemeinsame" cross-Plattform-Sprache wie CLI-Sprache (C#/IronPython/Java, etc.) dass .NET für Windows und Mono für linux/andere unterstützt.
Einfach ausgedrückt, ist es nicht möglich, die gleiche Anwendung auf verschiedenen Plattformen. Es ist wahr, die für Windows, Linux, oder andere UNIX-Plattform.
Die Idee einer einzigen ausführbaren Datei, ist nichts neues und ist die Idee hinter Java-Runtime und Windows .Net (Mono für Linux). Diese selbst stützen sich auf unterschiedliche Programme zusammengestellt, die auf die spezifischen Maschinen.
Könnten Sie einfach mit maßgeblich Pfade zu diesen Dateien, und diese Programme sind wahrscheinlich separat kompiliert auf verschiedenen Plattformen. Schwer zu sagen ohne den code anzuschauen.
Cygwin ist eine Kommandozeilen-Schnittstelle auf windows, bietet UNIX-look & feel.
Eine option, um zu versuchen, wäre der Wein, das ist ein Programm für Linux zum ausführen von windows-Programmen auf Linux.
Kann es möglich sein, wenn die Betriebssysteme auf der gleichen Plattform.
Jedoch, Linux läuft auf einer Vielzahl von Plattformen mit unterschiedlichen Prozessoren: VAX, PC, MAC, Sun, etc.
Ein problem ist, dass eine ausführbare Datei enthält, Montage (Maschinen-code) Anweisungen, die auf einem Prozessor. Der Maschinen-code für das hinzufügen eines Registers mit ARM-Prozessor ist möglicherweise anders, als ein Motorola, Intel oder Sun-Prozessor. So, mit diesem Kontext, eine ausführbare Datei kann nicht garantiert werden, laufen auf unterschiedlichen Plattformen.
Weiteres Problem ist, dass die Run-Time-library können auch Anrufe tätigen, um bestimmte Betriebssystem-Funktionen (wie Datei öffnen, anzeigen von text, etc.) Einige Betriebssysteme können nicht liefern die gleiche Funktionalität, während andere eine andere Methode zum ausführen der gleichen Funktionalität. Ein Betriebssystem auf einem embedded-Plattform nicht unterstützen ein Dateisystem. Windows Vista kann blockieren Anrufe von unsicheren MS-DOS-Anfragen.
Anderen Sprachen werden Plattform-unabhängig von der code-Generierung ausgeführt wird, indem eine "virtuelle Maschine". Wird der code nicht direkt ausgeführt durch einen Prozessor.
Die traditionelle Methode für die Portierung von C-und C++ - Methoden ist die Angabe der Quelle und lassen Sie die Kunden, erstellen die software auf Ihrer Plattform. Andere delivery-Prozesse ist das erstellen einer ausführbaren Datei für jede unterstützte Plattform, das wird ein Wartungs-Albtraum.
Kannst du nicht tun....d.h. Sie können nicht führen die gleiche ausführbare Datei, die unter Unix als auch Windows.
Verwendet Windows ausführbare Dateien, während Unix verwendet elf-Datei-format. Sie sind grundsätzlich anders. Anders als das Gegenstück zu Java, wo Sie ausführen können, um die gleiche ausführbare Datei( bytecode) auf beiden Computern, welche wiederum nutzt einen interpreter(JVM) ausführen.
Nun, sagte Sie, dass Sie zwei Optionen...
Wahrscheinlich, option NR 2 wäre besser geeignet...Its your call...
Grüße,
Kann man nicht machen, ein C++ - Programm, laden Sie die jeweiligen Bibliotheken mit #ifdef?
Ich denke, das ist die C++ - Lösung für cross-Plattform-binaries. Allerdings muss der code angepasst werden, um die Arbeit mit beiden oder alle ausgewählten Bibliotheken.
Jedoch ohne java-front-end oder 2 verschiedene Binärdateien oder ein Baseballschläger und ein sh oder ein Programm wie Wein-Sie werden nicht in der Lage zu führen Sie die jeweiligen binären.
Wenn Sie eine gut erzogene MS-Windows-Anwendung, kann es laufen unverändert auf Linux-x86-Plattformen mit der
Wein
- Dienstprogramm.Wine
ist ein Kompatibilitäts-Schicht bietet die Win32-und die zugehörigen runtime-library-Aufrufe, so dass das Programm denkt, es läuft auf MS Windows, aber der Wein Ebene übersetzt diese in Linuxisms mit wirklich guter Leistung.Detail auf http://www.winehq.org/