Pomyślne uruchomienie programu wymaga, aby trzy rzeczy pasowały:
- Zestaw instrukcji procesora (np. X86 w komputerze, ARM w telefonie komórkowym, PowerPC w niektórych komputerach Apple Mac, kod bajtowy Java dla apletów Java, CLI dla aplikacji „.Net” / Mono)
- Format pliku binarnego (np. PE / COFF „.exe” dla systemu Microsoft Windows, .jar dla apletów Java, PE32 „.exe”, ELF na systemach Unix / Linux)
- Interfejs programowania aplikacji ; (Np. POSIX w systemie Linux / Unix, Cocoa w systemie Mac OSX, Win32 w systemie Microsoft Windows, Biblioteka klas podstawowych dla aplikacji „.Net” / Mono).
Możesz zwiększyć szansę na dopasowanie wszystkich trzech przez posiadanie emulatorów / interpretatorów (dla innych zestawów instrukcji procesora), poprzez dodatkowe programy ładujące pliki (dla obcych formatów plików) oraz dodatkowe biblioteki programistyczne zapewniające więcej interfejsów API.
Zauważ też, że niektóre procesory mogą natywnie wykonywać więcej niż jeden zestaw instrukcji; komputer dość często ma zestawy instrukcji x86 i amd64 ; ARM procesor może wykonać cztery: arm32 / Thumb / kodu bajtowego Java / ThumbEE . Niektóre systemy operacyjne mogą również dostarczać więcej niż jeden interfejs API natywnie (Microsoft Windows zapewnia Win32 i POSIX ).
Do wszystkiego innego potrzebujesz dodatkowego oprogramowania. Do uruchomienia programów Java potrzebne są trzy części wymienione powyżej, aby działało: program Java Virtual Machine do uruchamiania kodu bajtowego; sposób uruchamiania programów Java oraz bibliotekę klas Java dla tych programów. „Java” jest tutaj marką kilku oddzielnych technologii pierwotnie opracowanych przez Sun, ale dla użytkownika są one często pobierane jako jedna.
To samo dotyczy „.Net”, który jest marką marketingową dla kilku różnych technologii pierwotnie opracowanych przez Microsoft: Common Run-run Run / Base Class Library (CLR) to API; VES to moduł ładujący, a zestaw instrukcji to Common Language Interface (CLI).
Nie musisz pobierać tych technologii z Microsoft, Sun lub Intel, ponieważ pierwotnie coś wymyślili. AMD zapewnia zgodność procesorów ze standardami Intela; oba Apache („Harmony”) i Google („Android Dalvik”) tworzą pakiet podobny do Java; a Mono zapewnia pakiet CLR / CLI / VES. Ważne jest to, że wszyscy stosują te same standardy, dzięki czemu są kompatybilne. Dysk DVD będzie odtwarzany na dowolnym odtwarzaczu DVD, który spełnia ten standard, a strona HTML będzie renderowana w dowolnej przeglądarce internetowej spełniającej standardy HTML.
- Mono to pakiet CLR / CLI / VES, który może działać na Mac OSX, MS Windows i Linux.
- Wine jest implementacją Win32 API, która może działać na Mac OSX, MS Windows i Linux.
- Możesz uruchomić Mono na Wine , na dowolnym systemie operacyjnym.
- Możesz uruchomić Wine na Qemu , na dowolnej architekturze procesora.
Tak więc Mono uruchamia aplikacje CLR .exe, a Wine uruchamia aplikacje Win32 .exe. Jedyną wspólną cechą jest to, że nazwy plików kończą się na „.exe”; zawartość jest zupełnie inna i niekompatybilna, więc potrzebujesz odpowiedniej .
Podobnie jak interpreter języka Python wystąpi błąd, gdy zostanie zaprezentowany w Perlu (i na odwrót), interpreter języka CLR wystąpi błąd, gdy zostanie zaprezentowany z kodem bajtowym x86 + Win32 lub JVM + Java. Jeśli możesz opublikować link do konkretnego programu, który chcesz uruchomić, ja lub ktoś inny powinien być w stanie powiedzieć ci dokładny zestaw instrukcji, format pliku i interfejs API, dla którego został zaprojektowany, i co musisz zainstalować w systemie Linux uruchomić. Mam nadzieję, że to pomaga!
(Czasami możesz potrzebować nawet obu. Na przykład symulator pociągu Openbve to C # i skompilowany do PE / COFF + CLI + CLR, ale opcjonalnie możesz użyć wtyczek binarnych C skompilowanych dla PE / COFF + Win32 + x86. W takim przypadku możesz potrzebuję wersji Win32 Mono pod Wine. Jeśli architektura procesora jest również inna, wymagałoby to emulacji; więc Mono pod Wine pod Qemu).
file *.exe
pokaże informacje o zestawie instrukcji procesora i typie pliku. Jeśli jest to aplikacja CLI / CLR („.Net” / Mono), która również korzysta z rodzimych wywołań interfejsu API Win32, musisz go uruchomić lub poszukaćfile *.dll
plików, które pokazują, że są rodzime x86 + Win32.