dyld: Бібліотека не завантажена ... Причина: зображення не знайдено


294

При спробі запуску виконуваного файлу, який мені надсилають в 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', він більше не заперечує з цього приводу. На жаль, тоді він скаржиться, що не може знайти наступну бібліотеку збільшення.

Чи є простий спосіб це виправити?


Якщо у вас все ще є проблем використання методу з цієї теми
Тарік

Відповіді:


171

Знайдіть усі прискорені бібліотеки:

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

Manpages: otool install_name_tool

РЕДАКТУ Колись назад, я написав сценарій python ( copy_dylibs.py) для автоматичного опрацювання всіх цих матеріалів під час створення програми. Він упакує всі бібліотеки з пакету додатків /usr/localабо /opt/localв нього та виправить посилання на ті бібліотеки, які слід використовувати @rpath. Це означає, що ви можете легко встановити сторонні бібліотеки за допомогою Homebrew і запакувати їх так само легко.

Зараз я оприлюднив цей сценарій на github .


4
@trojanfoe Ви можете, будь ласка, поясніть тут, що таке exefile, чи це шлях до файлу інструменту до файлу exec? чи не так?
VenushkaT

1
Після перекомпіляції виконуваного файлу я повинен повторити цей процес - досить дратівливий під час розробки.
tglas

2
Насправді кращий спосіб - використовувати DYLD_LIBRARY_PATHдля зміни шляху пошуку. Інша відповідь отримала це.
frankliuao

18
'exefile': такого файлу чи каталогу немає
ScottyBlades

2
@ScottyBlades exefileозначає виконавчий файл, який ви намагаєтеся запустити. У моєму випадку otool -L /usr/local/bin/phpзробив трюк.
brunouno

106

На вкладці цілі Generalє розділ, який називаєтьсяFrameworks, Libraries, and Embedded Content

Клацніть на +знаку, додайте необхідне frameworkі аварія вирішена.

Оновіть останній знімок екрана xcode


2
що мені додати? файлів дуже багато
Джо Слейман

@Himanshu У мене є проект libcppreset! у нього багато залежностей від boost і ... я запускаю скрипт bash, щоб змінити їх на install_name_tool, але для LC_ID_DYLIBмене не може так потрібно робити симпосилання в usr / loca / opt! є якийсь спосіб розібратися? : | Це болісно :(
Пн. Farhand,

85

Це працювало для мене:

brew upgrade node

7
Що це робить, хоча?
diegoaguilar

3
@diegoaguilar це перевстановлення nodeза допомогою homebrew. Можливо, інша установка зламала шлях до вузла. Також працював на мене.
Хьюго Ногейра

69

Після оновлення Mac OS до Mojave. Я спробував встановити 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

2
Моя intelliJ почала кидати цю помилку, коли я нещодавно оновила xcode. Я намагався запустити сервер node.js через intellij. Я не був впевнений, що пішло не так. Запуск node --versionу моїй системі призвів до тієї ж помилки. Виконання вищевказаних команд вирішило мою проблему.
Ішан

3
У моєму випадку я також запустив brew cleanupкоманду, що добре робити часом, якщо ви хочете позбутися старих версій.
Майкл Беренс

Щодо коментаря @ MichaelBehrens, я запускаю brew cleanupйого тоді виправлено.
Бурако

37

Для деяких це може бути таким же простим, як встановлення системного шляху для динамічних бібліотек. В OS X це так само просто, як і встановлення DYLD_LIBRARY_PATHзмінної середовища. Побачити:

Чи добре використовувати DYLD_LIBRARY_PATH на Mac OS X? І який алгоритм пошуку динамічної бібліотеки з ним?


Це може здатися дурним, але мені цікаво, яке значення мені слід встановити DYLD_LIBRARY_PATH?
Цезар

1
@Caesar Встановіть його в каталог, де б не знаходилися диліби, які ви намагаєтеся зв’язати.
Маркіз

Ви не можете очікувати змін користувачів DYLD_LIBRARY_PATH. Правильне рішення - включити нестандартні бібліотеки до .appі користувачеві нічого не доведеться робити. Однак, розробникові, можливо, доведеться зламати шлях завантажувача відповідно до моєї відповіді.
trojanfoe

12

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

Виправлення було першого запуску brew upgrade, по- видимому , в відповідно до цього superuser.com питання , який ви повинні зробити як brew update&& brew upgrade. Як тільки це було зроблено, я міг нарешті встановити рубін 2.3.1.


Людям потрібно припинити рекомендувати робити brew upgradeсаме так. Це може бути масовим руйнувачем для всієї системи. Натомість виділіть те, що потребує оновлення та оновлення лише цього.
Джіван

7

Ви можете використовувати команду otool з опцією -L для виконуваного файлу, яка відображатиме, де виконуваний файл очікує цих бібліотек.

Якщо шлях до тих, хто потребує зміни, скористайтеся командою install_name_tool , яка дозволяє встановити шлях до бібліотек.


7

Тепер, коли Xcode оновив їх IDE, вони трохи змінили, як це функціонує.

Раніше вона була розділена на окремий розділ, як показано вище, "Вбудовані бінарні файли" та "Пов'язані рамки та бібліотеки" як окремі розділи.

Тепер це один комбінований розділ із спадами праворуч щодо того, що має бути вбудовано.

Нові зміни IDE

Спочатку це мене бентежило, але зараз має ідеальний сенс.


5

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

5

Якщо ви використовуєте Xcode 11 далі:

Перейдіть на Generalвкладку і додайте рамку в Frameworks, Libraries, and Embedded Contentрозділ.

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

введіть тут опис зображення

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

Просто додайте рамку в Embedded Binariesрозділ, і ви закінчите.

Ура!


5

Щоб усунути помилку нижче на моєму 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

3

Я вирішив цю проблему за допомогою Product > Clean Build Folder( CommandShiftK), що робить нове чисте складання, дійсно дивним.


2

Ви можете використовувати sudo install_name_tool -changeшлях sudo install_name_tool -idзміни диліба та змінити ім'я диліба



2

Якщо ви використовуєте 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


Я створюю динамічний бібліотечний проект какао-рамки, він працює, і порівняно з моїм поганим проектом, створеним cmake, знаходжу це інше, і виправляю це, він працює на iOS.
cn00

2

якщо ви використовуєте virtualenv, просто видаліть папку вашого оточення та відтворіть її за допомогою цієї команди virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

Для тих, хто заходить на цю сторінку, оскільки вони отримали цю помилку, намагаючись зв’язати сторонні рамки зі своїм проектом за допомогою Xcode 6.3.1, проблема, з якою я зіткнувся, полягала в тому, що бібліотека створювалася зі старшою версією компілятора, використовуючи іншу версію стрімкого. Єдиний спосіб виправити це для мене - відновити рамку.

Ще одна причина, яку ви можете отримати, зазначена в технічному документі Apple.

Якщо ви створюєте додаток, який не використовує Swift, але вбудовує вміст, такий як рамки, які це роблять, Xcode не включатиме ці бібліотеки у ваш додаток. Як результат, ваш додаток вийде з ладу після запуску із повідомленням про помилку, яке виглядає так:

встановіть значення вбудованого вмісту, що містить код Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT), ТАК у вашому додатку

Ось посилання на повний документ Apple, який пояснює це тут


1

Для моєї основи я використовував підпроект Xcode, доданий як підмодуль git.

Я вважаю, що я отримав цю помилку, тому що я підписував рамки з іншою командою, що підписує ніж моя основна програма. (переключені команди на додаток; забули переключитися на рамки)

Рішення полягає в тому, щоб не підписувати в рамках рамкового проекту. Натомість у розділі головного додатка Target > General > Frameworks, Libraries, and Embedded Contentпідпишіть рамки через Embed & Sign.

Якщо я виберу Do not Embedабо Embed Without Signingзамість цього отримаю помилку:

FRAMEWORK недійсний для використання в процесі використання перевірки бібліотеки: на картографічному файлі немає cdhash, повністю не підписаний? Код повинен бути принаймні спеціальним підписаним.


1

Xcode 11.1 та Swift 5.1

Швидке виправлення

Спочатку переконайтеся, що в зовнішній доданій бібліотеці є опція "вбудовування" вибрана вкладка "Загальні", "Вбудовані бінарні файли".

Якщо все ще не працює ..

Це відбувається тому, що у вас є різні, незрівнянні версії бібліотек.

Оновіть Pods

pod update

Важливо: Перевірте, чи всі бібліотеки включені до списку "Налаштування збірки" -> "Бібліотеки та рамки", і ви дали можливість вбудувати в збірку

Просто чудово працює


0

Для тих, хто відчуває те ж саме з іншою бібліотекою чи пакетом, @ 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це зробив на самому ділі роботи.


0

Я це виправив, перевстановивши 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)"


0

Чи є простий спосіб це виправити?

Я просто використовував brew upgrade <the tool>. У моєму випадку brew upgrade tmux.


0

Я зіткнувся з проблемою аварії програми, цитуючи помилку SIGABRT у потоці. Огляд аварії - це бібліотека DLD не завантажена і зображення не знайдено щось подібне.

Це було помічено в Xcode 9.3. Причиною, що я дізнався, було те, що Xcode не збирає бібліотеки динамічно, тому мені довелося це робити вручну, що вирішило мою проблему з аварією.

Виконайте наступні кроки:

  1. Перейдіть до етапів побудови
  2. Натисніть кнопку "+" вгорі та виберіть "Нова фаза копіювання файлу"
  3. Виберіть пункт призначення як рамки та натисніть кнопку "+" нижче, щоб додати файли.
  4. Виберіть Додати інше внизу, натисніть CMD + SHIFT + G та вставте шлях нижче, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Тепер ви зможете побачити кілька швидких дилібів, виберіть усі бібліотеки швидкого доступу з розширенням .dylib та натисніть на відкрити.

Вони будуть додані до вбудованих двійкових файлів на загальній вкладці програми.

Створіть нову групу в папці проекту та додайте всі ці бібліотеки.

Тепер запустіть додаток.


0

Якщо ви використовуєте середовище Conda в терміналі, оновіть samtools для його вирішення.

conda install -c samcondols біоконди


0

Найкращий відповідь вище спочатку перевірте, що є результатом

отоол -Л

А потім зробіть наступне, якщо невірно

set_target_properties(
    MyTarget
    PROPERTIES
    XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS
    "@executable_path/Frameworks @loader_path/Frameworks"
)

І

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"

0

це має вирішити проблему

brew update
brew upgrade
brew cleanup

1
Будь ласка, додайте до своєї відповіді якесь пояснення, щоб інші могли навчитися на цьому
Ніко Хааз


-1

Для тих, хто може все-таки мати цю проблему:

Це проблема, що триває з боку Apple, і те, що для мене працювало, - це оновлення до ios 13.4 (бета). Встановив це і працював як шарм.


це не проблема IOS.
JBarros35
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.