Ferramentas do compilador, execv e “exec format error” no s390x chroot

Ferramentas do compilador, execv e “exec format error” no s390x chroot

Eu tenho uma máquina Debian 8 x86_64 com dois ambientes chroot. O primeiro éarmele o segundo és390x.armelfoi instalado na semana passada es390xfoi instalado recentemente.armelestá bem antes e depois dos390xinstalar. Mas estou detectando erros ao compilar no recém-instalados390x.

# 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

Não consigo encontrar nenhuma informação ao pesquisar/usr/lib/gcc/s390x-linux-gnu/5/cc1plus': execv: Exec format error.

Encontrei algumas leituras relacionadas a cc1plus, mas não vejo onde há um problema com a instalação:

# 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

Eu também fiz uma reinstalação dog++com apt-get install --reinstall g++, mas não ajudou.

Qual é o problema e qual é a solução?


EDITAR: este pode ser o problema ou pode ser um problema relacionado:Bug Debian 684909: qemu-system-s390x está quebrado, nenhum bootloader 's390-zipl.rom'.


Não acredito que seja devido ao projeto que estou tentando 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

Aqui está um tour de 5 segundos do procedimento para instalar odebian-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

Responder1

Isso acabou sendo um problema com os registros do binfmt. Extraindo da mensagem de Michael Tokarev emProblema Debian 799120: cc1/cc1plus falha com “execv: erro de formato exec” no QEMU s390x, não é possível compilar o programa C++:

Isso foi corrigido na versão contra a qual você relatou esse problema, 1:2.4+dfsg-3, onde atualizei as máscaras binfmt para incluir OSABI_GNU também. Este era #784605.

No entanto, parece que temos um problema com a atualização dos registros do binfmt. Se você tiver o pacote qemu-user-static instalado anteriormente (que registra apenas a variante OSABI_SYSV) e atualizá-lo para a versão atual (que deve registrar as variantes SYSV e GNU), o registro no kernel não será atualizado. Ele será atualizado na reinicialização ou você pode remover e reinstalar o pacote qemu-user-static, após o qual funcionará.

informação relacionada