Tengo una máquina Debian 8 x86_64 con dos entornos chroot. El primero esarmel
y el segundo ess390x
.armel
fue instalado la semana pasada, ys390x
fue instalado recientemente.armel
está bien tanto antes como después dels390x
instalar. Pero estoy detectando errores al compilar bajo el sistema recién instalado.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
No puedo encontrar ninguna información al buscar/usr/lib/gcc/s390x-linux-gnu/5/cc1plus': execv: Exec format error
.
Encontré algunas lecturas relacionadas con cc1plus
, pero no veo dónde hay un problema con la instalación:
# 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
También realicé una reinstalación deg++
con apt-get install --reinstall g++
, pero no ayudó.
¿Cuál es el problema y cuál es la solución?
EDITAR: este puede ser el problema o puede ser un problema relacionado:Error 684909 de Debian: qemu-system-s390x está roto, no hay gestor de arranque 's390-zipl.rom'.
No creo que se deba al proyecto que estoy intentando compilar:
# 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
Aquí está el recorrido de 5 segundos por el procedimiento para instalar eldebian-s390xambiente:
# 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
Respuesta1
Esto resultó ser un problema con los registros binfmt. Tomando del mensaje de Michael Tokarev enProblema de Debian 799120: cc1/cc1plus falla con "execv: error de formato exec" en QEMU s390x, no se puede compilar el programa C++:
Esto se solucionó en la versión contra la que informó este problema, 1:2.4+dfsg-3, donde actualicé las máscaras binfmt para incluir OSABI_GNU también. Este era el número 784605.
Sin embargo, parece que tenemos un problema con la actualización de los registros binfmt. Si tenía instalado previamente el paquete qemu-user-static (que registra solo la variante OSABI_SYSV) y lo actualiza a la versión actual (que debería registrar las variantes SYSV y GNU), el registro en el kernel no se actualiza. Se actualizará al reiniciar, o puede eliminar y reinstalar el paquete qemu-user-static, después de lo cual funcionará.