Das erfolgreiche Ausführen eines Programms setzt voraus, dass drei Dinge übereinstimmen:
- CPU-Befehlssatz (z. B. x86 in Ihrem PC, ARM in Ihrem Mobiltelefon, PowerPC in einigen Apple Macs, Java-Bytecode für Java-Applets, CLI für ".Net" / Mono-Anwendungen)
- Binärdateiformat (z. B. PE / COFF ".exe" für Microsoft Windows, .jar für Java-Applets, PE32 ".exe", ELF unter Unix / Linux)
- Anwendungsprogrammierschnittstelle ; (ZB POSIX unter Linux / Unix, Cocoa für Mac OSX, Win32 unter Microsoft Windows, Basisklassenbibliothek für ".Net" / Mono-Anwendungen).
Sie können die Wahrscheinlichkeit der Übereinstimmung aller drei erhöhen, indem Sie Emulatoren / Interpreter (für andere CPU-Befehlssätze), zusätzliche Dateilader (für fremde Dateiformate) und zusätzliche Programmierbibliotheken mit mehr APIs verwenden.
Beachten Sie auch, dass einige Prozessoren nativ mehr als einen Befehlssatz ausführen können. Ein PC verfügt häufig über x86- und amd64- Befehlssätze. Ein ARM- Prozessor kann vier ausführen: ARM32 / Thumb / Java-Bytecode / ThumbEE . Einige Betriebssysteme können auch mehrere APIs nativ bereitstellen (Microsoft Windows stellt Win32 und POSIX bereit ).
Für alles andere benötigen Sie zusätzliche Software. Zum Ausführen von Java-Programmen benötigen Sie die drei oben aufgeführten Teile, damit es funktioniert: ein Java Virtual Machine-Programm zum Ausführen des Bytecodes; eine Möglichkeit, Java-Programme zu starten, und eine Java-Klassenbibliothek, die die Programme aufrufen können. "Java" ist hier ein Markenname für mehrere separate Technologien, die ursprünglich von Sun entwickelt wurden, aber für einen Benutzer werden sie oft als eine heruntergeladen.
Gleiches gilt für ".Net", ein Marketing-Markenname für verschiedene Technologien, die ursprünglich von Microsoft entwickelt wurden: Die Common Language Run-Time / Base Class Library (CLR) ist die API. VES ist der Loader und Common Language Interface (CLI) ist der Befehlssatz.
Sie müssen diese Technologien nicht von Microsoft, Sun oder Intel herunterladen, nur weil sie ursprünglich etwas erfunden haben. AMD macht Prozessoren kompatibel mit Intels Standards; Sowohl Apache ("Harmony") als auch Google ("Android Dalvik") bilden eine Java-ähnliche Suite. und Mono bietet eine CLR / CLI / VES-Suite. Wichtig ist, dass alle die gleichen Standards verwenden und damit kompatibel sind. Eine DVD wird auf jedem DVD-Player abgespielt, der dem Standard entspricht, und eine HTML-Webseite wird in jedem Webbrowser gerendert, der den HTML-Standards entspricht.
- Mono ist eine CLR / CLI / VES-Suite, die unter Mac OSX, MS Windows und Linux ausgeführt werden kann.
- Wine ist eine Win32-API-Implementierung, die unter Mac OS X, MS Windows und Linux ausgeführt werden kann.
- Sie können Mono auf Wine und auf jedem Betriebssystem ausführen.
- Sie können Wine auf Qemu und auf jeder CPU-Architektur ausführen .
So lässt Mono CLR .exe-Anwendungen ausführen, und Wine lässt Win32 .exe-Anwendungen ausführen. Das Einzige, was gemeinsam ist, ist, dass die Dateinamen auf ".exe" enden. die inhalte sind völlig unterschiedlich und inkompatibel, also brauchst du die richtige .
Genauso wie ein Python-Interpreter bei der Darstellung mit Perl (und umgekehrt) einen Fehler verursacht, tritt bei der Darstellung eines CLR-Interpreters mit x86 + Win32- oder JVM + Java-Bytecode ein Fehler auf. Wenn Sie einen Link zu dem bestimmten Programm veröffentlichen können, das Sie ausführen möchten, sollten Sie selbst oder eine andere Person in der Lage sein, den genauen Befehlssatz, das Dateiformat und die API, für die es entwickelt wurde, sowie die für die Installation unter Linux erforderlichen Informationen anzugeben es laufen zu lassen. Hoffentlich hilft das!
(Manchmal benötigen Sie sogar beides. Beispielsweise ist der Openbve -Zugsimulator C # und wurde in PE / COFF + CLI + CLR kompiliert, kann aber optional C-Binär-Plugins verwenden, die für PE / COFF + Win32 + x86 kompiliert wurden. In diesem Fall haben Sie brauche eine Win32-Version von Mono unter Wine. Wenn die CPU-Architektur auch anders ist, müsste das emuliert werden; also Mono unter Wine unter Qemu).