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

Я установил библиотеки наддува, и они расположены в /opt/local/lib, Я думаю, что проблема как-то связана с тем, что исполняемый файл выглядит только в том каталоге, в котором он находится, например, когда я вставляю туда libboost_atomic.dylib, он больше не против этого. К сожалению, тогда он жалуется, что не может найти следующую библиотеку наддува.

Есть ли простой способ это исправить?

42 ответа

Решение

Найти все библиотеки поддержки:

$ 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)

: страницы руководства otoolinstall_name_tool

РЕДАКТИРОВАТЬ Хотя это не обязательно относится к сторонним библиотекам (таким как boost или Qt), если вы генерируете приложение и .dylib из того же проекта XCode, то вы можете сделать это без использования install_name_tool установив имя установки динамической библиотеки в настройках сборки. Вот пример, который позволяет исполняемому файлу приложения загрузить .dylib от ../Frameworks/:

Это сработало для меня:

brew upgrade node

В мишени General tab, есть Embedded Binaries field,

добавить обязательный framework и сбой решен.

нажми на + подписать и добавить framework

После обновления 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

Для некоторых это может быть так же просто, как установка системного пути для динамических библиотек. На OS X это так же просто, как установка DYLD_LIBRARY_PATH переменная окружения. Увидеть:

Можно ли использовать DYLD_LIBRARY_PATH в Mac OS X? И что за алгоритм динамического поиска в библиотеке?

Это должно решить проблему

brew update
brew upgrade
brew cleanup

Теперь, когда Xcode обновил свою IDE, они немного изменили принцип работы.

Раньше он был разделен на отдельный раздел, как показано выше, с "встроенными двоичными файлами" и "связанными платформами и библиотеками" как отдельными разделами.

Теперь это один комбинированный раздел с раскрывающимися справа списками, в которых указывается, что нужно встроить.

Сначала это сбивало меня с толку, но теперь имеет смысл.

Я получил эту ошибку, когда попытался установить ruby ​​2.3.1 с помощью rvm. Сначала он сказал мне бежать brew update, что я и сделал, а затем, когда я попытался запустить rvm install ruby-2.3.1Я получил ошибку в этом вопросе.

Исправление было в первом запуске brew upgradeПо-видимому, в соответствии с этим вопросом superuser.com вам нужно сделать оба brew update && brew upgrade, Как только это будет сделано, я смог наконец установить ruby ​​2.3.1.

Если вы используете Xcode 11 и далее:

Идти к General вкладку и добавьте фреймворк в Frameworks, Libraries, and Embedded Content раздел.

Важно: по умолчанию он может быть помечен какDo Not Embedизмените его на Embed Without Signing как показано на изображении, и все готово.

Для версий Xcode ниже 11:

Просто добавьте фреймворк в Embedded Binaries раздел, и все готово.

Ура!

Чтобы устранить приведенную ниже ошибку на моем Macbook Catalina 10.15.4:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
    Referenced from: /usr/local/bin/mongoexport
    Reason: image not found
Abort trap: 6

Я выполнил команду ниже и решил проблему выше:

brew switch openssl 1.0.2s

Вы можете использовать команду otool с опцией -L для исполняемого файла, который покажет, где исполняемый файл ожидает эти библиотеки.

Если путь к ним нужно изменить, используйте команду install_name_tool, которая позволяет вам указать путь к библиотекам.

У меня сработало необязательное создание фреймворков на этапах сборки.

В Xcode -> Target -> Build Phases -> Link Binary with Libraries -> Убедитесь, что недавно добавленные фреймворки, если они есть, помечены как необязательные

Я попал сюда, пытаясь запустить программу, которую я только что скомпилировал, используя 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)

Может кому то это нужно

если вы используете 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 Target -> Build Setting set Динамическая библиотека устанавливает имя базы данных в @rpath

Я исправляю это brew install libpng

Я исправил эту проблему, просто нажав Ctrl + Shift + K, что делает новую чистую сборку действительно странной.

В своей структуре я использовал подпроект Xcode, добавленный как подмодуль git.

Я полагаю, что получал эту ошибку, потому что подписывал фреймворк с другой командой подписи, чем мое основное приложение. (сменил команду для приложения; забыл переключиться на фреймворк)

Решение - не подписываться в рамках рамочного проекта. Вместо этого в главном приложенииTarget > General > Frameworks, Libraries, and Embedded Content раздел, подпишите фреймворк через Embed & Sign.

Если я выберу Do not Embed или Embed Without Signing Вместо этого я получаю сообщение об ошибке:

РАМКА недопустима для использования в процессе с использованием проверки библиотеки: сопоставленный файл не имеет cdhash, полностью неподписанный? Код должен быть подписан как минимум специально.

Xcode 11.1 и Swift 5.1

Быстрая починка

Сначала убедитесь, что во внешней добавленной библиотеке выбран параметр "Встраивание" на вкладке "Общие", "Встроенные двоичные файлы".

Если все еще не работает..

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

Обновите капсулы

pod update

Важно: убедитесь, что все библиотеки включены в список "Параметры сборки" -> "Библиотеки и фреймворки", и вы дали возможность встроить их в сборку.

Просто здорово работаю

Ты можешь использовать sudo install_name_tool -change изменить путь Dylib Аsudo install_name_tool -id изменить имя dylib

Если вы используете virtualenv, просто удалите папку своей среды и воссоздайте ее с помощью этой командыvirtualenv --python=/usr/local/bin/python3 the_name_of_my_env

В нашем случае это приложение iOS, построенное на Xcode 11.5, с использованием cocoapods (и cocoapods-binary, если хотите).

Мы видели этот сбой:

dyld: Library not loaded: @rpath/PINOperation.framework/PINOperation
  Referenced from: /private/var/containers/Bundle/Application/4C5F5E4C-8B71-4351-A0AB-C20333544569/Tellus.app/Frameworks/PINRemoteImage.framework/PINRemoteImage
  Reason: image not found

Оказалось, что мне пришлось удалить кеш подов и повторно запустить установку подов, поэтому Xcode укажет на эту разницу:

ht tps:https://stackru.com/images/ad51cb98951677eef1da7f3cdf5e9061cd84d5bc.png

Есть простой способ исправить это?

Я просто использовал brew upgrade <the tool>. В моем случае,brew upgrade tmux.

Быстрая починка

  • Удалите модуль (имя которого указано в сообщении об ошибке), добавив к нему комментарий в своем файле Podfile, например #Podname
  • Запустить
  • Раскомментируйте пакет, который вы прокомментировали ранее
  • Запустить pod install опять таки.

Это сработало для меня, и это легко сделать, поделившись им.

Для тех, кто испытывает то же самое с другой библиотекой или пакетом, @user3835452 находится на правильном пути. Я нашел это сообщение при попытке запустить composer:

dyld: Library not loaded: /usr/local/opt/openldap/lib/libldap-2.4.2.dylib
  Referenced from: /usr/local/opt/php@7.1/bin/php
  Reason: image not found
Abort trap: 6

Попробовав много разных способов, я просто побежал brew install openldap и это исправило это. Обратите внимание, что я уже побежал brew update а также brew upgrade но только после того, как я вручную установил openldap сделал это на самом деле работает.

В моем случае это был узел, который устарел, вам нужно обновить его после перехода на BigSur - узел обновления brew

Для тех, кто заходил на эту страницу, потому что они получили эту ошибку, пытаясь связать сторонний фреймворк со своим проектом с использованием Xcode 6.3.1, я столкнулся с проблемой, заключающейся в том, что библиотека создавалась со старой версией компилятора, использующего другую версию. быстро. Единственный способ исправить это для меня - перестроить фреймворк.

Другая причина, по которой вы можете получить это, изложена в техническом документе Apple.

Если вы создаете приложение, которое не использует Swift, но встраивает контент, такой как интегрированная среда, Xcode не будет включать эти библиотеки в ваше приложение. В результате ваше приложение будет зависать при запуске с сообщением об ошибке, которое выглядит следующим образом:

установите в своем приложении настройку сборки для встроенного контента, содержащего код Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT), в значение YES

Вот ссылка на полный Apple документ, который объясняет это здесь

Как сказано в https://gist.github.com/berkedel/d1fc6d13651c16002f64653096d1fded , вы можете попробовать

      brew uninstall --ignore-dependencies node icu4c
brew install node
brew link --overwrite node

Удаление старой версии php решило мою проблему, например:

       brew remove php@7.4

install_name_tool -add_rpath новый_путь к исполняемому_файлу install_name_tool -delete_rpath старый_путь к исполняемому файлу

Попробуйте удалить python3.7.3, используя это: -

https://huybien.com/how-to-completely-uninstall-python-on-macos/

Другие вопросы по тегам