我有一个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中拉出来。
您的应用程序是为x86-64构建的。 Intel x86-64二进制文件无法在ARM处理器上运行。
你有两条路可走:
您可以找到一个允许您从x86_64框中为Pi构建的交叉编译器,但这可能会变得复杂。
可能是你试图在32位处理器上运行64位二进制文件,但需要更多信息才能确定。
您可以在shell中使用file
命令进行检查。您可能必须使用-m32
标志重新编译原始系统到gcc。
请在两台设备上执行“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并期望它能够工作。必须为平台重建应用程序。