s390x chroot의 컴파일러 도구, execv 및 "exec 형식 오류"

s390x chroot의 컴파일러 도구, execv 및 "exec 형식 오류"

두 개의 chroot 환경을 갖춘 Debian 8 x86_64 시스템이 있습니다. 첫 번째는armel그리고 두 번째는s390x.armel지난주에 설치했고,s390x최근에 설치되었습니다.armel전후 모두 괜찮습니다s390x설치하다. 하지만 새로 설치된 환경에서 컴파일할 때 오류가 발생합니다.s390x.

# chroot debian-s390x
# g++ -dumpmachine
s390x-linux-gnu

# cd /home/cryptopp-5.6.3/

# make
g++ -DNDEBUG -g2 -O2 -pipe -c osrng.cpp
g++: error trying to exec '/usr/lib/gcc/s390x-linux-gnu/5/cc1plus': execv: Exec format error
GNUmakefile:382: recipe for target 'osrng.o' failed
make: *** [osrng.o] Error 1

검색해도 정보가 안나오네요/usr/lib/gcc/s390x-linux-gnu/5/cc1plus': execv: Exec format error.

와 관련된 읽기 자료를 찾았 cc1plus지만 설치에 문제가 있는 부분을 찾을 수 없습니다.

# file /usr/lib/gcc/s390x-linux-gnu/5/cc1plus
/usr/lib/gcc/s390x-linux-gnu/5/cc1plus: ELF 64-bit MSB executable, IBM S/390, version 1
(GNU/Linux), dynamically linked, interpreter /lib/ld64.so.1, for GNU/Linux 2.6.32,
BuildID[sha1]=aaa1e442e47e5e41c36b70d5e6a8f538da4ca3e7, not stripped

또한 재설치를 수행했습니다.g++을 사용 apt-get install --reinstall g++했지만 도움이 되지 않았습니다.

문제는 무엇이며, 해결책은 무엇입니까?


편집하다: 이것이 문제이거나 관련 문제일 수 있습니다.데비안 버그 684909: qemu-system-s390x가 손상되었으며 부트로더 's390-zipl.rom'이 없습니다..


나는 그것이 내가 컴파일하려는 프로젝트 때문이라고 믿지 않습니다.

# cat test.cxx 
#include <iostream>

int main(int argc, char* argv[])
{
  return argc;
}

# g++ test.cxx 
g++: error trying to exec '/usr/lib/gcc/s390x-linux-gnu/5/cc1plus': execv: Exec format error

다음은 설치 절차를 5초 동안 살펴보는 것입니다.데비안-s390x환경:

# apt-get install qemu-user-static debootstrap
# qemu-debootstrap --arch=s390x --keyring /usr/share/keyrings/debian-archive-keyring.gpg
  --variant=buildd --exclude=debfoster unstable debian-s390x http://ftp.debian.org/debian
# chroot debian-s390x
# apt-get install locales build-essentials emacs-nox

답변1

이는 binfmt 등록에 문제가 있는 것으로 밝혀졌습니다. Michael Tokarev의 메시지에서 가져옴Debian 문제 799120: QEMU s390x에서 "execv: exec 형식 오류"로 인해 cc1/cc1plus가 실패하고 C++ 프로그램을 컴파일할 수 없음:

이 문제는 이 문제를 보고한 버전인 1:2.4+dfsg-3에서 수정되었습니다. 여기서 OSABI_GNU도 포함하도록 binfmt 마스크를 업데이트했습니다. 이것은 #784605였습니다.

그러나 binfmt 등록을 업데이트하는 데 문제가 있는 것 같습니다. 이전에 qemu-user-static 패키지(OSABI_SYSV 변형만 등록)를 설치하고 이를 현재 버전(SYSV 및 GNU 변형 모두 등록해야 함)으로 업데이트한 경우 커널 내 등록이 업데이트되지 않습니다. 재부팅 시 업데이트되거나 qemu-user-static 패키지를 제거했다가 다시 설치하면 작동합니다.

관련 정보