WSL 이 32 비트 프로그램 타 임 스 오류 'Exec format error' 를 실행 하 는 문 제 를 해결 합 니 다.

2422 단어
WSL 에서 32 비트 프로그램 을 실행 하려 고 시도 할 때 셸 은 오류 가 발생 합 니 다. cannot execute binary file: Exec format error. 이것 은 WSL 이 현재 32 비트 ELF 실행 파일 을 지원 하지 않 기 때 문 입 니 다.WSL 에 이 지원 을 추가 해 달 라 는 요청 이 있 었 고 마이크로소프트 의 답변 은 쿠 쿠 쿠 였 다.그러나 공식 적 인 지지 가 없 는 것 과 사용 할 수 없 는 것 은 별 개의 일이 다. StackOverflow 의 한 workaaround 는 이 문 제 를 잘 해결 했다.원 리 는 한 마디 로 해석 기 (QEMU) 를 이용 해 32 비트 프로그램 을 64 비트 프로그램 으로 번역 해 실행 하 는 것 이다.이 방법 은 Ubuntu - WSL 에서 다음 과 같은 절 차 를 밟 습 니 다.
  • 설치 qemu - user - static: sudo apt install qemu-user-static
  • binfmts 설정: sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'
  • binfmt 서비스 재 개: sudo service binfmt-support start
  • i386 구조 와 관련 된 가방 사용 하기: sudo dpkg --add-architecture i386 sudo apt update sudo apt install gcc:i386
  • 이 는 우 분투 - WSL 에서 일 을 잘 할 수 있 음 이 입증 됐다.그러나 Arch - WSL 에 대해 서 는 일이 약간 번 거 로 워 졌 습 니 다. Arch - WSL 은 systemd 를 모 의 하 는 기능 이 없 기 때문에 systemd 를 지원 하 는 시스템 처럼 systemd 에 설 치 된 binfmt 서 비 스 를 사용 할 수 없습니다. binfmt - support 를 따로 설치 해 야 합 니 다. 이 가방 은 AUR 만 제공 합 니 다 (Yy 를 AUR 패키지 관리자 로 예 를 들 면): yay -S binfmt-support또한 qemu 는 Arch 에서 도 AUR 만 제공 합 니 다. yay -S qemu-user-static이 패 키 지 는 glib 2 - static 에 의존 합 니 다. 제 가 설치 할 때 glib 2 - static 의 컴 파일 과정 은 test 가 통과 하지 못 해서 실 패 했 습 니 다. PKGBUILD 에서 test 절 차 를 수 동 으로 설명 한 다음 makepkg -sri 컴 파일 하여 설치 할 수 밖 에 없 었 습 니 다.설치 가 완료 되면 시스템 을 시작 할 때마다 실행 해 야 합 니 다. sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'
    지원 을 추가 하 는 것 은 매우 불편 하 다.이 명령 을/etc/profile 에 추가 하여 로그 인 할 때마다 이 과정 을 자동 으로 실행 할 수 있 습 니 다.이 명령 은 슈퍼 유저 로 실행 되 어야 합 니 다. sudo 로 설정 되 어 있 지 않 으 면 비밀 번 호 를 면제 하려 면 visudo 로 sudoer 파일 을 수정 하고 추가 해 야 합 니 다.%USERNAME% ALL=(ALL) NOPASSWD:/usr/bin/update-binfmts
    update - binfmts 를 실행 할 때 비밀번호 가 필요 하지 않도록 합 니 다.% USERNAME% 를 사용자 이름 으로 바 꾸 는 것 을 주의 하 십시오. 명령 은 절대 경로 로 표시 해 야 합 니 다. 그렇지 않 으 면 sudoer 파일 이 유효 하지 않 습 니 다.

    좋은 웹페이지 즐겨찾기