Я пытаюсь выполнить двоичный файл на сопроцессоре xeon phi, и он возвращается с «bash: не может выполнить двоичный файл». Поэтому я пытаюсь найти, как либо просмотреть журнал ошибок, либо показать, что происходит, когда я говорю ему выполнить, что вызывает его неработоспособность. Я уже пробовал bash --verbose
, но он не отображал никакой дополнительной информации. Есть идеи?Xeon Phi не может выполнить двоичный файл
ответ
Update: Что ниже не отвечает на вопрос, что ОП в - это один возможное объяснение ошибки cannot execute binary file
, но тот факт, что сообщение об ошибке с префиксом bash:
указывает, что двоичный файл является вызывается правильно (by bash), но является несовместимым с исполняемой платформой (скомпилирован для другой архитектуры) - как @Barmar уже заявил в комментарии.
Таким образом, в то время как следующее содержит некоторую (надеюсь, еще несколько полезную) общую информацию, она не затрагивает проблему OP.
Один Возможной причиной cannot execute binary file
является ошибочно передать двоичный (исполняемый) файл - вместо сценария оболочки (текст файл, содержащий код оболочки) - как операнд (аргумент имени файла) в bash.
Следующая демонстрирует проблему:
bash printf # fails with '/usr/bin/printf: /usr/bin/printf: cannot execute binary file'
Обратите внимание, как путь в ошибке Пройдена двоичном в префиксов сообщение об ошибке дважды; Если первый префикс говорит bash:
, причина, скорее всего, не является проблемой неправильного вызова, но один из попыток вызвать несовместимый двоичный (скомпилированный для другой архитектуры).
Если вы хотите Баш ссылаться на двоичный код, вы должны использовать опцию -c
передать его, что позволяет указать всю командную строку; то есть двоичный плюс аргументы; например:
bash -c '/usr/bin/printf "%s\n" "hello"' # -> 'hello'
Если передать простого бинарного файла вместо полного пути - например -c 'program ...'
- тот бинарный под этим именем должен существовать в одном из каталогов перечисленных в $PATH
переменной что bash видит, в противном случае вы получите ошибку command not found
.
Если, напротив, двоичный расположен в текущего каталога, необходимо предварить имя файла с ./
для Баша, чтобы найти его; например-c './program ...'
Я пробовал это: ' [root @ Xeon-Phi-mic0 src] # bash -c ' program'' и получил 'bash: program: command not found' Может ли это быть чем-то конкретным для xeon phi или я просто неправильно понял вас? – Eric
@ Эрик: Это означает, что 'program' не находится в вашей' $ PATH' - см. Мое обновление. – mklement0
Я выполняю из каталога, в котором находится двоичный файл, поэтому у меня нет пути – Eric
Вы не указываете, где вы скомпилировали исполняемый файл и где вы пытались выполнить. Для компиляции программы на хост-системе должна быть выполнена непосредственно на сопроцессора, вы должны либо:
- при использовании один из составителей Intel, добавьте -mmic в компилятор командной строки
- при использовании GCC , использовать кросс-компилятор, поставляемые с MPSS (/usr/linux-k1om-4.7) - отмечает, однако, что GCC компилятор не воспользоваться векторизациями на сопроцессоре
Если вы хотите скомпилируйте непосредственно на сопроцессоре, вы можете установить необходимые файлы из дополнительных файлов rpm, предоставленных для сопроцессора (найдены в mpss-/k1om), используя указания из руководства пользователя MPSS для установки дополнительных файлов rpm. Для запуска программы на сопроцессоре, если вы собрали его на хосте, вы должны либо:
- скопировать исполняемый файл и необходимые библиотеки для сопроцессора с помощью УПП, прежде чем SSH к сопроцессору себя, чтобы выполнить код .
- используйте команду micnativeloadex на хосте - вы можете найти справочную страницу для этого на хосте.
Если вы пишете программу, используя модель выгрузки (часть работы выполняются с помощью узла, то часть работы передается от до сопроцессора), вы можете скомпилировать на хосте с использованием компиляторов Intel с нет специальных вариантов. Обратите внимание, что независимо от того, какой метод вы используете, любые библиотеки, которые будут использоваться с исполняемым файлом для сопроцессора, должны быть созданы для сопроцессора. Библиотеки по умолчанию существуют, но любые библиотеки, которые вы добавляете, вам нужно создать версию для сопроцессора в дополнение к любой версии, которую вы делаете для хост-системы. Я очень рекомендую статьи, которые вы найдете под https://software.intel.com/en-us/articles/programming-and-compiling-for-intel-many-integrated-core-architecture. Эти статьи написаны людьми, которые разрабатывают и/или поддерживают различные инструменты программирования для сопроцессора и должны отвечать на большинство ваших вопросов.
- 1. Xeon Phi сопроцессор против процессора Xeon Phi?
- 2. Не удается выполнить двоичную ошибку на Intel Xeon Phi
- 3. OpenCL не обнаруживает Xeon Phi
- 4. не может выполнить двоичный файл
- 5. Запуск Python на Xeon Phi
- 6. Проблема SCIF на Xeon Phi
- 7. векторизация и распараллеливание Xeon Phi
- 8. Запуск Erlang на Xeon Phi
- 9. Использование GCC на Xeon Phi
- 10. Перестановка в Intel Xeon Phi
- 11. Получить конкретную модель xeon phi
- 12. C++ не может выполнить двоичный файл
- 13. bash, не может выполнить двоичный файл
- 14. AWS: не может выполнить двоичный файл
- 15. PhantomJs не может выполнить двоичный файл
- 16. Как включить другой сопроцессор intel xeon phi?
- 17. встроенная сборка операции уменьшения для Xeon Phi
- 18. LD_LIBRARY_PATH с GDB на Xeon Phi
- 19. Почему Xeon Phi всегда получал плохую эффективность?
- 20. Xeon Phi Knights Угловые свойства с GCC
- 21. Как программировать Intel Xeon Phi с C#?
- 22. Xeon Phi: более медленная производительность с дополнением
- 23. Значение предложения nocopy в программировании Xeon Phi
- 24. Xeon Phi: icc C++ 11 Совместимость?
- 25. Динамическая память замедляется на Intel Xeon Phi
- 26. Загрузка пользовательского ядра на xeon-phi
- 27. Ошибка сегментации с высокими значениями (Xeon Phi)
- 28. Быстрый popcount на Intel Xeon Phi
- 29. Использование Xeon Phi только с потоками
- 30. Манипулирование масок для удвоений на Xeon Phi
Обычно это означает, что исполняемый файл был скомпилирован для несовместимой операционной системы. 'bash --verbose' не помогает, потому что это ядро определяет, может ли он что-то выполнить, а не bash. – Barmar
Попробуйте использовать команду 'file' для проверки программы. – Barmar
при использовании команды 'file' выдает следующее: ' ELF 64-разрядный исполняемый файл LSB, x86-64, версия 1 (GNU/Linux), динамически связанный (использует общие библиотеки), для GNU/Linux 2.6.24, BuildID [sha1] = 0x5716658b4548777cfbbac018225dee322b261efe, not stripped' – Eric