Что означает код errno 86 (EBADARCH)?

 
Также может означать:
КонстантаТипОС
ERROR_INVALID_PASSWORDОшибка WindowsWindows
ESTRPIPEerrnoLinux
ELIBMAXerrnoSolaris
INSTRUCTION_COHERENCY_EXCEPTIONКод BSODWindows
Предыдущий Следующий
ESTRPIPE ELIBMAX

EBADARCH

EBADARCH — результат загрузки программ в Darwin, означающий недопустимый тип процессора в исполняемом файле. Образ не может предоставить архитектуру, пригодную для процесса, который пытается его загрузить. При этом файл может быть правильно сформированным образом Mach-O: код относится к совместимости процессоров, а не обязательно к повреждению файла.

Двоичные файлы macOS могут содержать одну архитектуру или быть универсальными. Универсальный двоичный файл содержит отдельные срезы архитектур, а зависимая динамическая библиотека должна быть пригодна для клиентского образа, который её загружает. Поэтому проверки только основного исполняемого файла недостаточно: приложение, подключаемый модуль, вспомогательный инструмент, фреймворк и частная библиотека .dylib могут независимо вызвать несовпадение архитектур.

Сначала проверьте архитектуру процесса, затем каждый образ

  • Используйте lipo -archs <path> для основного исполняемого файла, отклонённого подключаемого модуля или фреймворка и его несистемных зависимостей.
  • Используйте otool -hv <path> для проверки заголовка Mach-O и otool -L <path> для перечисления связанных библиотек.
  • Сравнивайте архитектуру процесса, фактически выполняющего загрузку, а не только физического процессора Mac. Совместимый процессор компьютера не делает несовместимую внутрипроцессную библиотеку загружаемой.
  • Для распространяемого универсального продукта до упаковки убедитесь, что каждый требуемый двоичный файл содержит нужные срезы; добавление среза arm64 только в основное приложение не исправит частный фреймворк, содержащий лишь x86_64.

Не путайте с близкими ошибками

  • EBADMACHO означает, что сама структура Mach-O сформирована неправильно.
  • ESHLIBVERS означает несовместимость версии общей библиотеки после того, как соответствующий образ библиотеки был рассмотрен для загрузки.
  • Отсутствующая цель install name — проблема разрешения пути, а не результата проверки типа процессора.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.