답변:
프로그램을 성공적으로 실행하려면 다음 세 가지가 일치해야합니다.
에뮬레이터 / 인터프리터 (다른 CPU 명령어 세트의 경우), 추가 파일 로더 (외부 파일 형식의 경우) 및 추가 API를 제공하는 추가 프로그래밍 라이브러리를 통해이 세 가지를 모두 일치시킬 수 있습니다.
또한 일부 프로세서는 기본적으로 둘 이상의 명령어 세트를 실행할 수 있습니다. PC에는 종종 x86 및 amd64 명령 세트가 있습니다. ARM의 : 프로세서는 네 실행할 수 있습니다 / ThumbEE을 ARM32 / 엄지 / 자바 바이트 코드를 . 일부 운영 체제는 기본적으로 둘 이상의 API를 제공 할 수도 있습니다 (Microsoft Windows는 Win32 및 POSIX 제공 ).
다른 모든 것에는 추가 소프트웨어가 필요합니다. Java 프로그램을 실행하려면 위에 나열된 세 부분이 필요합니다 . 바이트 코드 를 실행 하는 Java Virtual Machine 프로그램 ; Java 프로그램을 시작하는 방법 및 프로그램이 호출 할 Java 클래스 라이브러리 "Java"는 원래 Sun에서 개발 한 여러 가지 개별 기술의 브랜드 이름이지만 사용자에게 종종 하나의 기술로 다운로드됩니다.
Microsoft가 원래 개발 한 여러 가지 다른 기술의 마케팅 브랜드 인 ".Net"에도 동일하게 적용됩니다. CLR (공용 언어 런타임 / 기본 클래스 라이브러리 )은 API입니다. VES 는 로더이고 공통 언어 인터페이스 (CLI)는 명령어 세트입니다.
Microsoft, Sun 또는 Intel에서 원래 기술을 개발했다고해서 해당 기술을 다운로드 할 필요는 없습니다. AMD는 프로세서를 인텔 표준과 호환되게합니다. Apache ( "Harmony")와 Google ( "Android Dalvik")은 모두 Java 계열을 만듭니다. Mono는 CLR / CLI / VES 제품군을 제공합니다. 중요한 것은 모든 사람이 동일한 표준을 사용하여 호환되도록한다는 것입니다. DVD 디스크는 표준을 충족하는 모든 DVD 플레이어에서 재생되며 HTML 웹 페이지는 HTML 표준을 충족하는 모든 웹 브라우저에서 렌더링됩니다.
따라서 Mono 는 CLR .exe 응용 프로그램을 실행하고 Wine 은 Win32 .exe 응용 프로그램을 실행합니다. 유일한 파일 이름은 ".exe"로 끝나는 것입니다. 내용이 완전히 다르고 호환되지 않으므로 올바른 내용이 필요합니다 .
Perl (및 그 반대로)을 표시 할 때 Python 인터프리터가 오류를 발생시키는 것처럼 x86 + Win32 또는 JVM + Java 바이트 코드를 표시하면 CLR 인터프리터가 오류가 발생합니다. 실행하려는 특정 프로그램에 대한 링크를 게시 할 수있는 경우 본인이나 다른 사람이 정확한 명령어 세트, 파일 형식 및 API, Linux에 설치해야하는 내용을 알려줄 수 있어야합니다. 그것을 실행합니다. 희망이 도움이됩니다!
(때로는 둘 다 필요할 수도 있습니다. 예를 들어 Openbve 기차 시뮬레이터는 C #이며 PE / COFF + CLI + CLR로 컴파일되지만 PE / COFF + Win32 + x86 용으로 컴파일 된 C 바이너리 플러그인을 선택적으로 사용할 수 있습니다.이 경우 Win32 버전의 Mono under Wine이 필요합니다 .CPU 아키텍처도 에뮬레이션이 필요한 것과 다르면 Qemu에서는 Wine의 Mono입니다.
짧은 대답 :
.NET은 Java에 대한 Microsoft의 답변이며 Mono는 그에 대한 오픈 소스 구현입니다. Wine은 기본 exe를위한 것이며 다른 기본 Windows 소프트웨어와 마찬가지로 .NET 런타임을 실행할 수 있다는 점을 제외하고는 Mono와 아무 관련이 없습니다.
긴 대답 :
Wine과 Mono (및 .NET)의 차이점을 이해하려면 기본 머신 코드 실행 파일과 "가상 머신"실행 파일 인 "공용 언어 런타임"의 차이점을 이해해야합니다.
기본 머신 코드 실행 파일은 프로세서에 특정한 명령어 코드를 사용하며 직접 실행합니다. 즉, 다른 프로세서에 맞게 다시 컴파일해야합니다. Wine은이 실행 코드를 직접 실행하고 라이브러리 호출을 잡아서 Win32 API의 자체 구현으로 경로 재지 정하여 Windows 용 기본 기계 코드 실행 파일을 실행할 수 있습니다.
"CLR"또는 "VM"실행 파일은 하나의 프로세서에만 국한된 것이 아닙니다. 프로세서를 실행하려면 추가 소프트웨어가 필요합니다. Mono / .NET은 이러한 종류의 시스템 중 하나입니다. .NET 프로그램은 Windows에서 실행할 때도 .NET 런타임이 설치되어 있어야합니다. 자바도 같은 방식으로 작동합니다.
그래서:
1) Wine과 Mono의 차이점 : Wine은 Windows 용으로 만들어진 기본 머신 코드 실행 파일을 실행하기위한 것이고 Mono는 특정 플랫폼 용으로 반드시 만들어 질 필요는없는 Mono / .NET 실행 파일을 실행하기위한 것입니다. Linux에 Mono를 설치하는 것은 Windows에 .NET 런타임을 설치하는 것과 같습니다.
2) 실행하려는 프로그램이 .NET을 전혀 사용하지 않으면 Wine을 사용해야합니다. 모노는 전혀 도움이되지 않습니다.
그러나 프로그램에서 .NET을 사용하는 경우 두 가지 옵션 중 하나가 작동하거나 작동하지 않을 수 있습니다.
Mono를 사용하여 실행할 수 있습니다. .NET 프로그램이 win32 API의 기본 기능을 사용하는 경우에는 실패합니다. Windows 용으로 제작 된 많은 .NET 응용 프로그램이 전부는 아닙니다.
또는 Wine 내부의 Windows 용 Microsoft .NET 런타임 을 설치 한 다음이를 통해 .NET 응용 프로그램을 실행할 수 있습니다. 이 경우 모노를 전혀 사용하지 않습니다.
3) Wine과 Mono는 서로 의존하지 않지만 위에서 언급 한대로 Wine에서 Microsoft .NET 런타임을 사용하여 Mono / .NET 응용 프로그램을 실행할 수 있습니다.
file *.exe
하면 CPU 명령어 세트 및 파일 유형에 대한 정보가 표시됩니다. 기본 Win32 API 호출 도 사용 하는 CLI / CLR ( ". Net"/ Mono) 응용 프로그램 인 경우이를 실행하거나 file *.dll
기본 x86 + Win32로 표시되는 파일을 찾아야합니다 .