Ich habe eine Debian 8 x86_64-Maschine mit zwei Chroot-Umgebungen. Die erste istarmel
und das zweite ists390x
.armel
wurde letzte Woche installiert unds390x
wurde vor kurzem installiert.armel
ist in Ordnung sowohl vor als auch nach dems390x
installieren. Aber ich bekomme Fehler beim Kompilieren unter dem neu installiertens390x
.
# 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
Ich kann keine Informationen finden bei der Suche nach/usr/lib/gcc/s390x-linux-gnu/5/cc1plus': execv: Exec format error
.
Ich habe einiges zum Thema gefunden cc1plus
, sehe aber nicht, wo bei der Installation ein Problem besteht:
# 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
Ich habe auch eine Neuinstallation vong++
mit apt-get install --reinstall g++
, aber es hat nicht geholfen.
Was ist das Problem und was ist die Lösung?
BEARBEITEN: Dies oder ein damit zusammenhängendes Problem könnte das Problem sein:Debian-Fehler 684909: qemu-system-s390x ist defekt, kein Bootloader „s390-zipl.rom“.
Ich glaube nicht, dass es an dem Projekt liegt, das ich zu kompilieren versuche:
# 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
Hier ist die 5-Sekunden-Tour durch die Installation desdebian-s390xUmfeld:
# 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
Antwort1
Dies stellte sich als ein Problem mit binfmt-Registrierungen heraus. Aus Michael Tokarevs Nachricht inDebian-Problem 799120: cc1/cc1plus schlägt mit „execv: exec format error“ unter QEMU s390x fehl, C++-Programm kann nicht kompiliert werden:
Dies wurde in der Version behoben, für die Sie dieses Problem gemeldet haben, 1:2.4+dfsg-3, wo ich die Binfmt-Masken aktualisiert habe, um auch OSABI_GNU einzuschließen. Dies war #784605.
Es sieht jedoch so aus, als hätten wir ein Problem mit der Aktualisierung von Binfmt-Registrierungen. Wenn Sie zuvor das Paket qemu-user-static installiert hatten (das nur die OSABI_SYSV-Variante registriert) und es auf die aktuelle Version aktualisieren (die sowohl SYSV- als auch GNU-Varianten registrieren sollte), wird die Registrierung im Kernel nicht aktualisiert. Sie wird beim Neustart aktualisiert, oder Sie können das Paket qemu-user-static entfernen und neu installieren, danach funktioniert es.