Alat kompiler, execv dan “exec format error” di bawah s390x chroot

0

Saya memiliki mesin Debian 8 x86_64 dengan dua lingkungan chroot. Yang pertama armeldan yang kedua s390x. armeldiinstal minggu lalu, dan s390xdiinstal baru-baru ini. armelbaik sebelum dan sesudah s390xinstalasi. Tapi saya mengalami kesalahan saat kompilasi di bawah yang baru diinstal 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

Saya tidak dapat menemukan informasi apa pun saat mencari /usr/lib/gcc/s390x-linux-gnu/5/cc1plus': execv: Exec format error.

Saya memang menemukan beberapa bacaan yang berkaitan dengan cc1plus, tetapi saya tidak melihat di mana ada masalah dengan instalasi:

# 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

Saya juga melakukan instal ulang g++dengan apt-get install --reinstall g++, tetapi tidak membantu.

Apa masalahnya, dan apa solusinya?


EDIT : ini mungkin masalahnya, atau mungkin masalah terkait: Bug Debian 684909: qemu-system-s390x rusak, tidak ada bootloader 's390-zipl.rom' .


Saya tidak percaya ini karena proyek yang saya coba kompilasi:

# 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

Berikut adalah tur 5-detik prosedur untuk menginstal lingkungan debian-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
jww
sumber

Jawaban:

0

Ini ternyata menjadi masalah dengan pendaftaran binfmt. Mengambil dari pesan Michael Tokarev di Debian Issue 799120: cc1 / cc1plus gagal dengan "execv: exec format error" di bawah QEMU s390x, tidak dapat mengkompilasi program C ++ :

Ini telah diperbaiki pada versi yang Anda laporkan dengan masalah ini, 1: 2,4 + dfsg-3, tempat saya memperbarui topeng binfmt untuk menyertakan OSABI_GNU juga. Ini adalah # 784605.

Namun, sepertinya kami memiliki masalah dengan memperbarui pendaftaran binfmt. Jika Anda memiliki paket qemu-user-static yang diinstal sebelumnya (yang hanya mendaftarkan varian OSABI_SYSV) dan memperbaruinya ke versi saat ini (yang seharusnya mendaftarkan varian SYSV dan GNU), pendaftaran dalam kernel tidak diperbarui. Ini akan diperbarui saat reboot, atau Anda dapat menghapus dan menginstal ulang paket qemu-user-static, setelah itu akan berfungsi.

jww
sumber