| Предыдущий | Следующий |
| 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 — проблема разрешения пути, а не результата проверки типа процессора.
Ссылки
- Apple XNU: errno.h
- Apple XNU: поля процессора и типа файла Mach-O
- Apple: создание универсального двоичного файла macOS
- Apple: требования динамических библиотек к архитектуре
Нужно найти другой код? Найти другой код состояния или ошибки.