Docker Centos,无法执行二进制文件

问题描述 投票:0回答:3

我有一个C++ binary在当地的centos顺利运行。最近,我开始学习docker并尝试在C++上运行我的centos docker应用程序。

首先,我从docker hub中取出centos:latest并在其上安装了我的C++应用程序并且运行成功,没有任何问题。现在我在raspberry-pi上安装了docker并再次拉出centos并尝试在其上运行相同的应用程序,但它给了我错误。

bash:无法执行二进制文件

通常,当我们尝试在不同的体系结构上运行应用程序然后构建它们时,会出现此错误。我检查了覆盆子-pi上的cat etc/centos-release,结果是CentOS Linux release 7.6.1810 (AltArch),其中当地的centos是CentOS Linux release 7.6.1810 (Core)

两台设备上的uname -a如下

raspberry-pi,centos docker Linux c475f349e7c2 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l armv7l armv7l GNU/Linux

centos,centos docker Linux a57f3fc2c1a6 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

编辑:此外,file myapplication

TTCHAIN: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.24, BuildID[sha1]=287b501c8206893f7819f215ee0033586212b143, with debug_info, not stripped

我的问题是我如何运行相同的原生应用centos,从docker上的raspberry-pi模型3中拉出来。

c++ docker centos raspberry-pi3
3个回答
1
投票

您的应用程序是为x86-64构建的。 Intel x86-64二进制文件无法在ARM处理器上运行。

你有两条路可走:

  1. 如果您没有该应用程序的源代码,则需要一个可在Raspberry Pi上运行的x86-64仿真器。考虑到Pi的能力较弱以及英特尔倾向于起诉任何为其处理器创建仿真器的人,我怀疑你会找到一个公开可用的产品。
  2. 如果您有应用程序的源代码,则需要将其重建为Raspberry Pi可执行文件。你似乎知道它是用C ++编写的。 GCC和其他工具链可用于Raspberry Pi(很可能你的Pi上的“yum install gcc”会为你获取编译器和工具)。构建应用程序应该与为x86_64构建应用程序非常相似。

您可以找到一个允许您从x86_64框中为Pi构建的交叉编译器,但这可能会变得复杂。


0
投票

可能是你试图在32位处理器上运行64位二进制文​​件,但需要更多信息才能确定。

您可以在shell中使用file命令进行检查。您可能必须使用-m32标志重新编译原始系统到gcc。


0
投票

请在两台设备上执行“uname -a”并发布结果。

很可能处理器或库类型不匹配。

我假设(希望)你不是想在Pi上运行x86编译的应用程序。虽然Docker可用于两种处理器类型,但Docker不会在Pi上运行x86二进制文件,反之亦然。

实际上,AltArch目前意味着以下架构之一...... ppc64,ppc64le,i386,armhfp(arm v7 32位),aarch64(arm v8 64位)。 Core建议使用CentOS的主流x86和x86_64版本。

是的,我打赌它就是这样......你不能只是将x86二进制文件转移到Raspbian并期望它能够工作。必须为平台重建应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.