Dyld: библиотека не загружена... Причина: изображение не найдено
При попытке запустить исполняемый файл, который был отправлен в Mac OS X, я получаю следующую ошибку:
dyld: Library not loaded: libboost_atomic.dylib
Referenced from: /Users/"Directory my executable is in"
Reason: image not found
Trace/BPT trap:5
Я установил библиотеки boost, и они расположены в /opt/local/lib
. Я думаю, что проблема имеет какое-то отношение к исполняемому файлу, только находящемуся в каталоге, в котором он находится, когда я вставляю libboost_atomic.dylib там, он больше не против. К сожалению, он жалуется, что не может найти следующую библиотеку boost.
Есть ли простой способ исправить это?
Ответы
Ответ 1
Найдите все библиотеки повышения:
$ otool -L exefile
exefile:
@executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
и для каждого libboost_xxx.dylib
выполните:
$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile
и, наконец, подтвердите, используя otool
снова:
$ otool -L exefile
exefile:
/opt/local/lib/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
Справочные страницы: otool
install_name_tool
РЕДАКТИРОВАТЬ Некоторое время назад я написал скрипт на python (copy_dylibs.py
) для автоматической обработки всего этого при создании приложения. Он упакует все библиотеки из /usr/local
или /opt/local
в комплект приложения и исправит ссылки на эти библиотеки для использования @rpath
. Это означает, что вы можете легко установить стороннюю библиотеку с помощью Homebrew и упаковать их так же легко.
Теперь я опубликовал этот скрипт на github.
Ответ 2
В целевом General tab
есть Embedded Binaries field
.
добавить требуемый framework
, и сбой разрешен.
![введите описание изображения здесь]()
нажмите на знак +
и добавьте framework
Ответ 3
Это сработало для меня:
brew upgrade node
Ответ 4
Для некоторых это может быть так же просто, как установить системный путь для динамических библиотек. В OS X это так же просто, как установка переменной среды DYLD_LIBRARY_PATH
. См.:
Можно ли использовать DYLD_LIBRARY_PATH в Mac OS X? И каков алгоритм поиска динамической библиотеки?
Ответ 5
После обновления Mac OS до Мохаве. Я попытался установить модули npm с помощью команды yarn
. Я получил ошибку:
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.60.dylib
Referenced from: /usr/local/bin/node
Reason: image not found
Abort trap: 6
Исправлено с помощью:
brew update
brew upgrade
Ответ 6
Я получил эту ошибку, когда попытался установить ruby 2.3.1 с помощью rvm. Сначала мне предложили запустить brew update
, что я и сделал, а затем, когда я попытался запустить rvm install ruby-2.3.1
, я получил ошибку в этом вопросе SO.
Исправление заключалось в том, чтобы сначала запустить brew upgrade
, по-видимому, в соответствии с этим вопросом superuser.com вам нужно сделать как brew update
&& & brew upgrade
. Как только это будет сделано, я смогу, наконец, установить ruby 2.3.1.
Ответ 7
Вы можете использовать команду otool с параметром -L для исполняемого файла, который отобразит, где исполняемый файл ожидает, что эти библиотеки будут быть.
Если путь к ним нужно изменить, используйте команду install_name_tool, которая позволяет вам установить путь к библиотекам.
Ответ 8
Я попытался запустить программу, которую я только что скомпилировал с помощью CMake. Когда я пытаюсь запустить его, он жалуется, говоря:
dyld: Library not loaded: libboost_system.dylib
Referenced from: /Users/path/to/my/executable
Reason: image not found
Я обошел проблему, сообщающую CMake использовать статическую версию Boost вместо того, чтобы позволить ей использовать динамическую:
set(Boost_USE_STATIC_LIBS ON)
Ответ 9
Я исправляю это с помощью brew install libpng
Ответ 10
Теперь, когда X-Code обновил свою IDE, они немного изменили то, как это работает. Раньше его делили на отдельные секции, как показано выше, с "Встроенными двоичными файлами" и "Связанными фреймворками и библиотеками" в качестве отдельных секций. Теперь это один комбинированный раздел с выпадающими меню справа о том, что должно быть встроено. Сначала это меня смущало, но теперь имеет смысл.
![New IDE Changes]()
Ответ 11
Для тех, кто приходит на эту страницу, потому что они получили эту ошибку, пытающуюся связать стороннюю структуру с их проектом с помощью Xcode 6.3.1, проблема, с которой я столкнулся, заключалась в том, что библиотека создавалась с более старой версией компилятора, используя другая версия быстрой. Единственный способ исправить это для меня - это перекомпилировать фреймворк.
Другая причина, по которой вы можете получить это, указана в техническом документе Apple.
Если вы создаете приложение, которое не использует Swift, но включает контент, такой как фреймворк, который делает, Xcode не будет включать эти библиотеки в ваше приложение. В результате ваше приложение выйдет из строя при запуске с сообщением об ошибке, выглядящим следующим образом:
установите для встроенного содержимого код Swift Code (EMBEDDED_CONTENT_CONTAINS_SWIFT) в YES в приложении
Вот ссылка на полный документ Apple, который объясняет это здесь
Ответ 12
Вы можете использовать sudo install_name_tool -change
изменить путь dylib
А также
sudo install_name_tool -id
изменить имя dylib
Ответ 13
Я столкнулся с проблемой сбоя приложения, ссылаясь на ошибку SIGABRT в потоке. Обзор сбоя показывает, что библиотека dyld не загружена, и изображение не нашло что-то подобное.
Это было замечено в версии xcode 9.3. Причина, по которой я узнал, была в том, что xcode не собирает библиотеки динамически, поэтому мне пришлось сделать это вручную, что решило мою проблему сбоев.
Выполните следующие шаги:
Шаг 1: Перейти к этапам сборки
Шаг 2: Нажмите кнопку "+" вверху и выберите "Фаза создания нового файла"
Шаг 3: Выберите место назначения в качестве фреймворка и нажмите кнопку "+" ниже, чтобы добавить файлы.
Шаг 4: Выберите Добавить другое в нижней части, нажмите CMD + SHIFT + G и вставьте путь ниже,
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos
Теперь вы сможете увидеть некоторые быстрые библиотеки, выберите все быстрые библиотеки с расширением .dylib и нажмите "Открыть".
Они будут добавлены во встроенные двоичные файлы на вкладке "Общие" приложения.
Создайте новую группу в папке проекта и добавьте все эти библиотеки.
Теперь запустите ваше приложение.
Счастливое Кодирование
Ответ 14
Для тех, кто испытывает то же самое с другой библиотекой или пакетом, @user3835452 находится на правильном пути. Я нашел это сообщение при попытке запустить composer
:
dyld: Library not loaded: /usr/local/opt/openldap/lib/libldap-2.4.2.dylib
Referenced from: /usr/local/opt/[email protected]/bin/php
Reason: image not found
Abort trap: 6
Попробовав много разных способов, я просто запустил brew install openldap
, и он всё исправил. Обратите внимание, что я уже запустил brew update
и brew upgrade
, но только после того, как я вручную установил openldap
, он действительно заработал.
Ответ 15
Может быть, кому-то это нужно:
если вы используете cmake, добавьте DYLIB_INSTALL_NAME_BASE "@rpath"
к целевым свойствам:
set_target_properties(target_dyLib PROPERTIES
# # for FRAMEWORK begin
# FRAMEWORK TRUE
# FRAMEWORK_VERSION C
# MACOSX_FRAMEWORK_IDENTIFIER com.cmake.targetname
# MACOSX_FRAMEWORK_INFO_PLIST ./Info.plist
# PUBLIC_HEADER targetname.h
# # for FRAMEWORK end
IPHONEOS_DEPLOYMENT_TARGET "8.0"
DYLIB_INSTALL_NAME_BASE "@rpath" # this is the key point
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}"
)
или в проекте динамической библиотеки xcode Цель → Настройка сборки установите База имен динамической установки библиотеки на @rpath
Ответ 16
Я исправил это, переустановив Homebrew
Удаление
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
Установить
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Ответ 17
Я исправил эту проблему, просто нажав Ctrl + Shift + K, что делает новую чистую сборку действительно странной.
Ответ 18
Есть ли простой способ это исправить?
Я просто использовал brew upgrade <the tool>
. В моем случае, brew upgrade tmux
.
Ответ 19
Ничто из вышеперечисленного не сработало для меня, но brew reinstall icu4c
сработало.
Ответ 20
XCode 11.1 & Swift 5.1
Это происходит потому, что у вас есть разные несопоставимые версии библиотек.
Есть
pod update
Просто отлично работает