2012-11-29 2 views
0

나는 SO 질문을 읽고 난 여전히 의심입니다 - ". 모든 OS 특정 바이너리 형식을 준수하기 위해 바이너리를 요구한다"는 응답의 Why an executable program for a specific CPU does not work on Linux and Windows?Windows 응용 프로그램이 Linux 또는 Mac에서 작동하지 않는 이유는 무엇입니까?

하나는 말한다

맞습니까? 그렇다면 위의 명령문에 이것을 추가 할 수 있습니까? 실행 파일에 바이너리 코드 (???)가 포함되어 있습니다. 100011은 Windows 바이너리 포맷에서 5를 의미합니다. 그러나이 동일한 코드는 다른 OS에서 다른 것을 의미하거나 전혀 의미가 없습니다. 따라서 win을 위해 만들어진 실행 파일은 리눅스에서 작동하지 않습니다.

+0

이봐! 왜 아래 표를 던지겠습니까? 그 어리석은 질문을 생각한다면, 대답하고 계몽 해주십시오. –

답변

1

Windows 및 Linux는 다른 기반을 사용하여 작성됩니다. Windows는 DOS를 기반으로하며 Linux는 UNIX를 기반으로합니다. Windows가 자신의 OS 용 소스 코드를 공개했다면 Linux는 Windows 프로그램을 실행할 수있는 호환성이 더 높았지만 실제로는 그렇지 않았습니다. 리눅스는 독자적으로 개발 되었기 때문에 그것이 다를 것이라고 이해할 수 있습니다. 무엇보다도 Linux는 다른 시스템 명령과 호출을 사용하기 때문에 둘 다 "실행 프로그램"을 가지고 있어도 실행되는 방식은 OS에 따라 다릅니다.

하나의 예 : Windows에서 명령 프롬프트를 열고 dir을 입력하십시오. 그러면 현재 디렉토리의 모든 파일과 하위 디렉토리가 나열됩니다. 그러나 디렉토리 내용을 나열하는 Linux는 ls입니다.

출처 : Why can't linux run windows programs?

0

원유, 내 자신의 질문에 대답에서 일반 영어 시도 - 그것은 같은 역할 등 모니터, 키보드, 네트워크 카드 -

는 OS 응용 프로그램/프로그램이 하드웨어와 상호 작용할 수 있습니다을 앱과 하드웨어 사이의 중간 남자.

우리는 왜 맨 먼저 중간 남자가 필요합니까? 나는 그것에 대한 답을 모른다. 그러나 나는 추측 할 것이다. 어쩌면 우리는 모든 하드웨어와 상호 작용할 수 있도록 코드를 애플 리케이션에 추가 할 수 있습니다. 그러나 모든 응용 프로그램에서이 작업을 수행하면 각 응용 프로그램에 많은 공간 (낭비)이 필요합니다. 그들은 중복 될 것입니다. 예를 들어, 모든 게임에는 서로 다른 브랜드의 모니터에서 게임 화면을 보여주는 자체 코드가 있습니다. 어쩌면 다른 문제도있을 것입니다.

하드웨어와 상호 작용하려면 프로그램이 OS와 "대화"하거나 "시스템 호출"을해야합니다. OS에서 사용하는 "언어"는 "API"라고합니다. 모든 OS에는 고유 한 API가 있습니다. 따라서 Windows API에서 "말하는"프로그램은 리눅스 시스템과 "대화"할 수 없습니다. 내가 사용

링크 - http://en.wikipedia.org/wiki/Operating_system http://en.wikipedia.org/wiki/System_call

+0

CS 및/또는 학위에 대한 지식이있는 사람이 있으면이 답변을 개선하거나 수정하십시오. –

관련 문제