[unix] 32 비트 Ubuntu 시스템에서 64 비트 앱 실행

내가 본 모든 질문은 64 비트 시스템에서 32 비트 앱을 실행하는 것과 관련이 있습니다.

32 비트 Ubuntu 12.04 (실제로 기초적인 OS Luna)를 실행 중이며 64 비트 응용 프로그램을 실행하려고합니다. 달리는:

./64bit_app.run

( 64bit_app.run내가 실행하려고하는 64 비트 응용 프로그램은 어디에 있습니까 ) 결과는 다음과 같습니다.

bash: ./64bit_app.run: no se puede ejecutar el fichero binario

이진 파일을 실행 / 실행 / 열 수 없음 “으로 번역됩니다 .

실행할 수 있어야합니까? 32 비트 시스템에서 64 비트 앱을 실행할 수 있습니까? 그렇다면 어떻게?



답변

32 비트 커널이있는 x86_64의 Linux에서는 직접 그렇게 할 수 없습니다. 64 비트 코드를 실행하려면 64 비트 커널이 필요합니다. (참고 : 커널. 64 비트 커널에서 32 비트 사용자 영역을 실행하고 64 비트 바이너리를 지원할 수 있습니다. 배포 방법에 따라 다릅니다. 데비안의 경우 여기 에 있습니다.)

일부 가상화 소프트웨어는 (사용중인 CPU 유형에 제한이 있음) 그렇게 할 수 있으며 에뮬레이터도 그렇게 할 수 있습니다. 그러나 기본적으로 실행하려면 64 비트 커널이 필요합니다.

대부분의 64 비트 배포판에는 32 비트 지원 (기본적으로 또는 설치 가능)이 있으므로 동일한 OS에서 64 비트 및 32 비트 바이너리를 모두 실행해야하는 경우에 사용해야합니다.


답변

@Mat의 답변 확장 :

예, 일부 가상화 소프트웨어가이를 수행 할 수 있습니다. 처리해야 할 주요 장애물은 32 비트 환경에서 CPU의 64 비트 기능을 사용할 수없고 64 비트 커널의 기능도 사용할 수 없다는 것입니다. CPU 64 비트를 지원 한다면 (2003 년경부터 모두 지원합니다).

귀하의 질문은 암시 적으로 자신의 시스템 환경에서 64 비트 앱을 실행하고 싶다고 말합니다. 실제로 의도 한 경우 모든 가상 머신 기반 솔루션이 제외됩니다. 나에게 알려진 유일한 것은 qemu의 커널 에뮬레이션입니다. 그래서:

qemu-x86_64 ./your_64bit_app

현재 환경 변수와 함께 현재 커널과 함께 현재 시스템에서 실행합니다 . 물론 그렇게 빠르지는 않지만 CPU를 에뮬레이트해야합니다.

Linux x86-64 앱만 에뮬레이트 할 수 있습니다.


답변

대부분의 64 비트 아키텍처는 32 비트 아키텍처의 확장입니다. 그것들은 새롭고 완전히 다르므로 분명히 32 비트 아키텍처는 64 비트 대응이 무엇인지 전혀 모릅니다. 그들은 새로운 기능이 무엇인지, 새로운 레지스터가 무엇인지 모릅니다. 그들이 알고 있더라도 새로운 레지스터와 기능에 액세스 할 수 없습니다. 결과적으로 32 비트 커널은 64 비트 컨텍스트를 저장할 수 없습니다. 이 모든 것 때문에 32 비트 시스템에서 64 비트 앱을 실행할 수 없습니다.

신중하게 조작 된 64 비트 인식 32 비트 커널 은 64 비트 앱을 실행할 수 있지만 컨텍스트 절약을 위해 64 비트 코드가 여전히 필요하므로 더 이상 순수한 32 비트 커널이 아닙니다.

에뮬레이터 내에서 64 비트 OS를 실행하거나 VT-x를 사용하여 32 비트 호스트 내에서 64 비트 게스트 가상 머신을 실행할 수 있습니다. 그러나 기술적으로는 다른 64 비트 시스템에서 실행 중입니다. 32 비트 Linux 커널에서 직접 64 비트 코드를 실행할 수는 없습니다.


답변