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

Ответ 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

Просто отлично работает