| Предыдущий | Следующий |
| EUSERS | ELIBEXEC |
ESHLIBVERS
ESHLIBVERS — результат загрузки программ Darwin для несовпадения версии общей библиотеки. Это не просто «библиотека отсутствует». Документация Apple по динамическим библиотекам описывает проверку совместимости зависимостей: до загрузки dyld сравнивает текущую версию библиотеки на диске с версией совместимости, записанной при компоновке клиента. Если текущая версия старше требуемой версии совместимости, зависимая библиотека не загружается.
Это проблема совместимости ABI. Библиотека может находиться по ожидаемому пути и иметь совместимую процессорную архитектуру, но всё равно быть слишком старой для клиентского двоичного файла. И наоборот, переименование или копирование произвольной более новой на вид .dylib не доказывает, что библиотека предоставляет нужный клиенту ABI.
Какие данные собрать
- Выполните
otool -L <client>иotool -L <library>; Apple документирует эту команду для просмотра текущей версии и версии совместимости. - Используйте
otool -l, если необходимо сравнить install name или команды загрузки. Формат Mach-O применяетLC_LOAD_DYLIBв клиентах иLC_ID_DYLIBв динамических библиотеках. - Запишите точный клиент, разрешённый путь к библиотеке и оба значения версии. Эти сведения отличают ошибку версии от отсутствующего файла, повреждённого образа Mach-O или неверной архитектуры.
Правильное устранение
Разверните ревизию библиотеки, заявленная версия совместимости которой удовлетворяет требованиям клиента, либо пересоберите клиент и библиотеку как совместимый комплект. Рекомендации Apple по проектированию библиотек предлагают использовать отдельный install name для несовместимой основной ревизии, а не позволять клиентам случайно связываться с библиотекой, ABI которой изменился.
Документированное сравнение версий применяется к зависимым библиотекам. Библиотека, открываемая напрямую через dlopen, проходит другой путь; сохраните dlerror() для этого вызова, а не считайте любое сообщение динамической загрузки случаем ESHLIBVERS.
Ссылки
- Apple XNU: errno.h
- Apple XNU: LC_LOAD_DYLIB, LC_ID_DYLIB и поля версий
- Apple: рекомендации по проектированию динамических библиотек
- Apple: обзор динамических библиотек
Нужно найти другой код? Найти другой код состояния или ошибки.