s390x chroot 下的编译工具、execv 和“exec 格式错误”

s390x chroot 下的编译工具、execv 和“exec 格式错误”

我有一台 Debian 8 x86_64 机器,有两个 chroot 环境。第一个是armel第二个是s390xarmel已于上周安装,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 Bug 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 注册的问题。摘自 Michael Tokarev 的留言Debian 问题 799120:cc1/cc1plus 在 QEMU s390x 下失败,出现“execv:exec 格式错误”,无法编译 C++ 程序

您报告此问题的版本 1:2.4+dfsg-3 中已修复此问题,我在此版本中更新了 binfmt 掩码以包含 OSABI_GNU。此版本号为 #784605。

但是,我们似乎在更新 binfmt 注册时遇到了问题。如果您之前安装了 qemu-user-static 包(仅注册 OSABI_SYSV 变体)并将其更新为当前版本(应同时注册 SYSV 和 GNU 变体),则内核注册不会更新。它将在重新启动时更新,或者您可以删除并重新安装 qemu-user-static 包,之后它就可以正常工作了。

相关内容