Инструменты компилятора, execv и «ошибка формата exec» в chroot-окружении s390x

Инструменты компилятора, execv и «ошибка формата exec» в chroot-окружении s390x

У меня есть машина Debian 8 x86_64 с двумя chroot-окружениями. Первое —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++, но это не помогло.

В чем проблема и каково решение?


РЕДАКТИРОВАТЬ: это может быть проблемой или связанной с ней проблемой:Ошибка Debian 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-секундный обзор процедуры установки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

решение1

Это оказалось проблемой с регистрацией binfmt. Из сообщения Михаила Токарева вПроблема Debian 799120: cc1/cc1plus завершается с ошибкой «execv: exec format error» в QEMU s390x, не удается скомпилировать программу C++:

Это было исправлено в версии, в которой вы сообщили об этой проблеме, 1:2.4+dfsg-3, где я обновил маски binfmt, включив в них также OSABI_GNU. Это было #784605.

Однако, похоже, у нас проблема с обновлением регистраций binfmt. Если у вас ранее был установлен пакет qemu-user-static (который регистрирует только вариант OSABI_SYSV) и вы обновили его до текущей версии (которая должна регистрировать как варианты SYSV, так и GNU), регистрация в ядре не обновится. Она обновится при перезагрузке, или вы можете удалить и переустановить пакет qemu-user-static, после чего он заработает.

Связанный контент