Linux에서 Windows exe가 작동하지 않는 이유는 무엇입니까?


29

하지 에 대해 묻는 방법 리눅스에서 Windows exe 인 작업을 확인합니다.

작동하지 않는지 묻습니다 .

Windows가 실행 파일을 실행하는 방법과 Linux가 실행 파일을 실행하는 방법의 차이점은 무엇입니까? 그들은 왜 달라야 했습니까? 게다가 리눅스 실행 파일에 파일 확장자가없는 이유는 무엇입니까?


답변:


45

Linux 및 Windows 실행 파일은 다른 형식을 사용합니다. Linux는 대부분의 아키텍처 에서 ELF 형식을 사용하는 반면 Windows는 PE 형식을 사용 합니다. ELF는 Linux가 공유 라이브러리를 관리하는 방법에 더 적합하고 PE가 Windows가 공유 라이브러리를 관리하는 방법에 더 적합하지만 Linux가 PE 실행 파일 또는 Windows ELF 실행 파일을 실행할 수없는 근본적인 이유는 없습니다. 실제로 Linux Wine을 통해 PE 실행 파일을 실행할 수 있습니다 .

어려운 점은 Windows와 Linux의 API 가 완전히 다르다는 것입니다 . 커널 인터페이스와 라이브러리 세트가 다릅니다. 따라서 실제로 Windows 응용 프로그램을 실행하려면 Linux에서 응용 프로그램이 수행하는 모든 API 호출을 에뮬레이션해야합니다. 많은 작업입니다. 와인은 어느 정도까지는 와인을 생산하지만 특히 Windows 제조업체가 협조하지 않기 때문에 매우 어렵습니다. 예를 들어, 모국어가 중국어 일 때 영어를 배우는 것과 비교할 수 있습니다. ).


9
"어휘"는 훌륭한 비유입니다.
추후 공지가있을 때까지 일시 중지되었습니다.

나는 당신이 완전히 다른 의미라고 생각합니다 .
Mircea Chirea

안드로이드는 리눅스를 기반으로하기 때문에 ARM 용으로 컴파일 된 경우 Linux 10 억 개 (패키지 아님)도 지원합니다
Suici Doga

@SuiciDoga 일종의, 그러나 그보다 더 복잡합니다. Android 커널은 Linux 바이너리를 실행할 수 있지만 (예 : NEON 레지스터를 사용하여 올바른 커널 ABI 용으로 컴파일 된 경우) 동적으로 링크 된 프로그램을 실행하려면 모든 라이브러리도 설치해야합니다. (그리고 그렇게한다면 패키지 매니저도 설치할 수 있기 때문에“바이너리이지만 패키지는 아님”은 사실이 아닙니다.)
Gilles 'SO-stop

그래, 난 당신이 등 라이브러리 경로 변경이 있는지에 대해 알고
Suici 도가

14

Windows 바이너리는 ABI 가 다르며 Linux 바이너리 와 다른 API를 사용 합니다.

* nix는 확장 대신 실행 파일을 식별하기 위해 권한 비트 를 사용하므로 Linux 바이너리에는 확장이 필요하지 않습니다 .


1
이에 대한 답변 ... 추가 데이터에 동의 : ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_
executable


@Gilles의 답변에서 누락 된 두 번째 정보가 특히 마음에 듭니다.
Timothy Gu

@ IgnacioVazquez-Abrams 매우 흥미 롭습니다. 우분투 16.04 Linux에서 Windows 게임 PlantsVsZombies.exe를 기본적으로 실행한다고 말하면 어떻게됩니까? 나는 그것이 지루하지 않다는 것을 알고 지루함에서 그것을했지만, 그렇게했고 나는 그것을 완벽하게 잘 재생할 수있었습니다. 그 게임은 스팀 API가 먼저 실행되어야하지만 분명히 그렇지 않았기 때문에 불가능합니다. 어떻게 시작 했습니까 ??? 그것에 대해 새로운 질문을해야합니까?
Nikos

@ RestlessC0bra : 와인과 모노는 사물입니다.
Ignacio Vazquez-Abrams

0

이것이 프로그래머 측의 평신도 용어로 설명 된 창 측면을 들었습니다.

Windows에는 프로그램에 후크가 있으며 Exe가 호출하는 OS는 Linux에 없습니다. 두 환경의 차이로 인해. 처음에는 Linux가 권한을 찾고 Windows는 확장을 검사하고 속성을 확인한 다음 Exe 파일 내부를 살펴보면서 먼저 링크 가능한 형식을 찾습니다.

Netbackup과 같은 응용 프로그램이 Linux에서 시작되어 와인 IMHO를 사용하지 않고 Windows 환경에서 실행되도록 수정되었습니다. 종종 가장 안정적인 Windows 응용 프로그램 중 가장 안정적인 응용 프로그램입니다.

Windows 앱을 사용하는 경우 일반적으로 응용 프로그램이 보유한 후크 중 일부가 완전히 해제되지 않았고 Windows가 (메모리 누수) 것으로 생각하기 때문입니다. Windows에서 해제되지 않은 메모리 공간을 다른 응용 프로그램으로 넘기면 충돌이 발생합니다.


2
어떻게 든 빌 게이츠가 내 질문에 대답했다고 믿고 싶습니다 ;-)
Nav
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.