Докер Центос, не может выполнить двоичный файл - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть один C++ binary, который работает на локальном centos. Недавно я начал изучать docker и пытаться запустить свое приложение C++ на centos docker.

Во-первых, я вытащил centos:latest из концентратора докеров и установил на него мое приложение C++, и оно прошло успешно, без каких-либо проблем. Теперь я установил docker на raspberry-pi, снова вытащил centos и попытался запустить на нем то же приложение, но оно выдало ошибку.

bash: невозможно выполнить двоичный файл

Обычно эта ошибка возникает, когда мы пытаемся запустить приложение на архитектуре, отличной от той, на которой они построены. Я проверил cat etc/centos-release на Raspberry-Pi, и результат равен CentOS Linux release 7.6.1810 (AltArch), где результат на локальных сентосах равен 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

сенто, сентос докер 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

EDIT: Также 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, вытащенное из докера на raspberry-pi модели 3.

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Ваше приложение было построено для x86-64. Двоичные файлы Intel x86-64 НЕ МОГУТ работать на процессоре ARM.

У вас есть два пути для продолжения:

  1. Если у вас нет исходного кода для приложения, вам понадобится эмулятор x86-64, который будет работать на вашем Raspberry Pi. Учитывая меньшие возможности Pi и склонность Intel предъявлять иск любому, кто создаст эмулятор для своих процессоров, я сомневаюсь, что вы найдете тот, который доступен для всех.

  2. Если у вас есть исходный код приложения, вам необходимо перестроить его как исполняемый файл Raspberry Pi. Вы, кажется, знаете, что это было написано на C ++. Для Raspberry Pi доступны GCC и другие наборы инструментов (скорее всего, yum install gcc на вашем Pi подберет для вас компилятор и инструменты). Сборка приложения должна быть очень похожа на сборку для x86_64.

Вы могли бы найти кросс-компилятор, который позволил бы вам собрать Pi для вашего компьютера из x86_64, но это может оказаться сложным.

0 голосов
/ 04 апреля 2019

Пожалуйста, введите "uname -a" на обоих устройствах и опубликуйте результаты.

Скорее всего, тип процессора или библиотеки не совпадает.

Я полагаю (надеюсь), что вы 'не пытаемся запустить приложение, скомпилированное для x86, на Pi.Хотя Docker доступен для обоих типов процессоров, Docker не будет запускать двоичные файлы x86 на Pi или наоборот.

На самом деле, AltArch в настоящее время означает одну из следующих архитектур ... ppc64, ppc64le, i386, armhfp (arm v732-битный), aarch64 (arm v8 64-битный).Core предлагает обычные сборки CentOS для x86 и x86_64.

Да, держу пари, что так оно и есть ... нельзя просто передать двоичный файл x86 в Raspbian и ожидать, что он будет работать.Приложение должно быть перестроено для платформы.

0 голосов
/ 04 апреля 2019

Возможно, вы пытаетесь запустить 64-разрядный двоичный файл на 32-разрядном процессоре, но для этого потребуется дополнительная информация.

Вы можете проверить, используя команду file в оболочке. Возможно, вам придется перекомпилировать в исходной системе с флагом -m32 в gcc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...