dyld: Biblioteka nie załadowana… Powód: Nie znaleziono obrazu


294

Podczas próby uruchomienia pliku wykonywalnego, który został wysłany do systemu Mac OS X, pojawia się następujący błąd

dyld: Library not loaded: libboost_atomic.dylib
  Referenced from: /Users/"Directory my executable is in"
  Reason: image not found
Trace/BPT trap:5

Zainstalowałem biblioteki doładowania i znajdują się one w /opt/local/lib. Myślę, że problem ma coś wspólnego z plikiem wykonywalnym, który tylko przegląda katalog, w którym się znajduje, ponieważ kiedy wklejam tam plik „libboost_atomic.dylib”, nie ma to już nic przeciwko. Niestety narzeka, że ​​nie może znaleźć kolejnej biblioteki doładowań.

Czy istnieje prosty sposób to naprawić?


Jeśli nadal masz problem, skorzystaj z metody z tego tematu
Tarik

Odpowiedzi:


171

Znajdź wszystkie biblioteki doładowań:

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

i dla każdego libboost_xxx.dylibwykonaj:

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile

i na koniec sprawdź, używając otoolponownie:

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

Strony: otool install_name_tool

EDYCJA Jakiś czas temu napisałem skrypt Pythona ( copy_dylibs.py), aby automatycznie opracować wszystkie te rzeczy podczas tworzenia aplikacji. Spakuje wszystkie biblioteki z /usr/locallub /opt/localdo pakietu aplikacji i naprawi odniesienia do tych bibliotek, które będą używane @rpath. Oznacza to, że możesz łatwo zainstalować bibliotekę innej firmy za pomocą Homebrew i spakować je równie łatwo.

Teraz podałem ten skrypt do publicznej wiadomości na github .


4
@trojanfoe, czy możesz wyjaśnić tutaj, jaki jest exefile, czy jest to ścieżka do pliku exec narzędzia? prawda?
VenushkaT,

1
Po ponownej kompilacji pliku wykonywalnego muszę powtórzyć ten proces - dość irytujące podczas programowania.
tglas

2
W rzeczywistości lepszym sposobem jest DYLD_LIBRARY_PATHzmodyfikowanie ścieżki wyszukiwania. Druga odpowiedź ma to.
frankliuao

18
„exefile”: brak takiego pliku lub katalogu
ScottyBlades

2
@ScottyBlades exefileoznacza plik wykonywalny, który próbujesz uruchomić. W moim przypadku załatwiłem sprawę otool -L /usr/local/bin/php.
brunouno,

106

W celu General zakładce znajduje się sekcja o nazwieFrameworks, Libraries, and Embedded Content

Kliknij +znak, dodaj wymagane, frameworka awaria zostanie rozwiązana.

Zaktualizuj najnowszy zrzut ekranu xcode


2
co powinienem dodać jest wiele plików
Joe Sleiman

@Himanshu Mam libcppreset dla mojego projektu! ma wiele zależności od boosta i ... uruchamiam skrypt bash, aby zmienić je za pomocą install_name_tool, ale dla tego LC_ID_DYLIBnie muszę tworzyć dowiązania symbolicznego w usr / loca / opt! czy jest jakiś sposób, aby to rozgryźć? : | To bolesne :(
Mo Farhand

85

To działało dla mnie:

brew upgrade node

7
Co to jednak robi?
diegoaguilar

3
@ Diegoiegoilar to jest ponowna instalacja nodeprzy użyciu homebrew. Prawdopodobnie inna instalacja zepsuła ścieżkę węzła. Pracował również dla mnie.
Hugo Nogueira,

69

Po aktualizacji Mac OS do Mojave. Próbowałem zainstalować moduły npm za pomocą yarnpolecenia Mam błąd:

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

Naprawiono za pomocą:

brew update
brew upgrade

2
Mój intelliJ zaczął zgłaszać ten błąd, kiedy niedawno zaktualizowałem xcode. Próbowałem uruchomić serwer node.js za pośrednictwem intellij. Nie byłem pewien, co poszło nie tak. Uruchomienie node --versionw moim systemie spowodowało ten sam błąd. Uruchomienie dwóch powyższych poleceń rozwiązało mój problem.
Ishan

3
W moim przypadku uruchomiłem również brew cleanuppolecenie, co warto zrobić, jeśli chcesz pozbyć się starych wersji.
Michael Behrens

Jeśli chodzi o komentarz @ MichaelBehrens, uruchamiam, brew cleanupa potem to naprawiłem.
Buraco

37

Dla niektórych może to być tak proste, jak ustawienie ścieżki systemowej dla bibliotek dynamicznych. W systemie OS X jest to tak proste, jak ustawienieDYLD_LIBRARY_PATH zmiennej środowiskowej. Widzieć:

Czy można używać DYLD_LIBRARY_PATH na Mac OS X? A jaki jest algorytm dynamicznego przeszukiwania biblioteki?


To może wydawać się głupie, ale zastanawiam się, jaką wartość powinienem ustawić DYLD_LIBRARY_PATH?
Cezar

1
@ Caesar Ustaw go w katalogu, w którym znajdują się dyliby, które próbujesz połączyć.
markshiz

Nie możesz oczekiwać, że użytkownicy się zmienią DYLD_LIBRARY_PATH. Prawidłowym rozwiązaniem jest dołączenie niestandardowych bibliotek do .appi użytkownik nie będzie musiał nic robić. Deweloper może jednak nadal musiał zhakować ścieżkę modułu ładującego zgodnie z moją odpowiedzią.
trojanfoe

12

Wystąpił ten błąd, gdy próbowałem zainstalować Ruby 2.3.1 przy użyciu rvm. Najpierw powiedział mi, aby uruchomić brew update, co zrobiłem, a następnie, gdy próbowałem uruchomić rvm install ruby-2.3.1, otrzymałem błąd w tym pytaniu SO.

Poprawka polegała na pierwszym uruchomieniu brew upgrade, najwyraźniej zgodnie z pytaniem superuser.com , musisz zrobić oba brew update&& brew upgrade. Gdy to zrobisz, mogę w końcu zainstalować Ruby 2.3.1.


Ludzie muszą przestać zalecać brew upgradetakie postępowanie. Może to być ogromnym zaburzeniem dla całego systemu. Zamiast tego wyodrębnij to, co wymaga uaktualnienia, i uaktualnij tylko to.
Jivan

7

Możesz użyć otool komendy z opcją -L dla pliku wykonywalnego, który wyświetli miejsce, w którym plik wykonywalny spodziewa się tych bibliotek.

Jeśli ścieżka do tych wymaga zmiany, użyj komendy install_name_tool , która pozwala ustawić ścieżkę do bibliotek.


7

Teraz, gdy Xcode zaktualizował swoje IDE, nieco zmienili sposób, w jaki to działa.

Kiedyś był dzielony na osobną sekcję, jak pokazano powyżej z „Osadzonymi plikami binarnymi” i „Połączonymi strukturami i bibliotekami” jako osobnymi sekcjami.

Teraz jest to jedna połączona sekcja z rozwijanymi menu po prawej stronie, co należy osadzić.

Nowe zmiany IDE

Na początku było to dla mnie mylące, ale teraz ma doskonały sens.


5

Przybyłem tutaj, próbując uruchomić program, który właśnie skompilowałem za pomocą CMake. Kiedy próbuję go uruchomić, narzeka, mówiąc:

dyld: Library not loaded: libboost_system.dylib
  Referenced from: /Users/path/to/my/executable
  Reason: image not found

Ominąłem problem, mówiąc CMake, aby używał statycznej wersji Boost, zamiast pozwalać jej używać dynamicznej:

set(Boost_USE_STATIC_LIBS ON)

5

Jeśli używasz Xcode 11 i nowszych:

Przejdź do Generalzakładki i dodaj strukturę w Frameworks, Libraries, and Embedded Contentsekcji.

Ważny: domyślnie może być oznaczony jako Do Not Embed, zmień go na Embed Without Signingpokazany na obrazku i możesz zacząć.

wprowadź opis zdjęcia tutaj

Dla wersji Xcode poniżej 11:

Po prostu dodaj szkielet w Embedded Binariessekcji i gotowe.

Twoje zdrowie!


5

Aby rozwiązać poniższy błąd na moim Macbooku 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

Uruchomiłem polecenie poniżej i obejrzałem powyższy problem:

brew switch openssl 1.0.2s

3

Rozwiązałem ten problem za pomocą Product > Clean Build Folder( CommandShiftK), co sprawia, że ​​nowa czysta kompilacja jest naprawdę dziwna.


2

Możesz użyć sudo install_name_tool -changezmiany ścieżki dylib i sudo install_name_tool -idzmienić nazwę dylib



2

Jeśli używasz cmake, dodaj DYLIB_INSTALL_NAME_BASE "@rpath"do właściwości docelowych:

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}"
    )

lub w projekcie biblioteki dynamicznej Xcode Cel -> Ustawienia kompilacji ustaw Dynamiczną bibliotekę Zainstaluj nazwę bazy na @rpath


Tworzę dynamiczny projekt biblioteki frameworka kakao, działa, i w porównaniu z moim złym projektem wygenerowanym przez cmake znajduję to inaczej i naprawiłem to, działa na iOS.
cn00

2

jeśli używasz virtualenv, po prostu usuń folder swojego środowiska i utwórz go ponownie za pomocą tego polecenia virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

Dla każdego, kto odwiedza tę stronę, ponieważ napotkał ten błąd podczas próby połączenia frameworka innej firmy z ich projektem przy użyciu Xcode 6.3.1, problem, na który natrafiłem, polegał na tym, że biblioteka była tworzona przy użyciu starszej wersji kompilatora przy użyciu innej wersji szybkiego. Jedynym sposobem, aby to naprawić, było przebudowanie frameworka.

Inny powód, dla którego możesz to uzyskać, znajduje się w dokumencie technicznym Apple.

Jeśli budujesz aplikację, która nie korzysta z Swift, ale osadza zawartość, taką jak platforma, Xcode nie uwzględni tych bibliotek w Twojej aplikacji. W rezultacie aplikacja zawiesi się po uruchomieniu z komunikatem o błędzie wyglądającym następująco:

ustaw w kompilacji ustawienie kompilacji Osadzona zawartość zawiera kod Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT) na TAK

Oto link do pełnego dokumentu Apple, który to wyjaśnia tutaj


1

W moim frameworku korzystałem z podprojektu Xcode dodanego jako podmoduł git.

Myślę, że otrzymywałem ten błąd, ponieważ podpisywałem platformę z innym zespołem podpisującym niż moja główna aplikacja. (zmieniałem zespoły na aplikację; zapomniałem zmienić na framework)

Rozwiązaniem jest nie podpisywanie w ramach projektu ramowego. Zamiast tego w sekcji głównej aplikacji Target > General > Frameworks, Libraries, and Embedded Contentpodpisz platformę za pomocą Embed & Sign.

Jeśli wybiorę Do not Embedlub Embed Without Signingzamiast tego pojawia się błąd:

FRAMEWORK niepoprawne do użycia w procesie przy użyciu sprawdzania poprawności biblioteki: plik mapowany nie ma cdhash, całkowicie niepodpisany? Kod musi być podpisany przynajmniej ad-hoc.


1

Xcode 11.1 i Swift 5.1

Szybka naprawa

Najpierw upewnij się, że dodana biblioteka zewnętrzna ma opcję osadzania wybrana w zakładce Ogólne, Wbudowane pliki binarne.

Jeśli nadal nie działa ..

Dzieje się tak, ponieważ masz różne niedopasowane wersje bibliotek.

Zaktualizuj kapsułki

pod update

Ważne: sprawdź, czy wszystkie biblioteki są uwzględnione w Ustawieniach kompilacji -> lista bibliotek i frameworków oraz czy masz opcję wbudowania w kompilację

Po prostu działa świetnie


0

Dla każdego, kto doświadcza tego samego z inną biblioteką lub pakietem, @ user3835452 jest na dobrej drodze. Znalazłem tę wiadomość podczas próby uruchomienia 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

Po wypróbowaniu wielu różnych sposobów właśnie uruchomiłem brew install openldapi naprawiłem to. Zauważ, że ja już biegł brew update, a brew upgradejednak dopiero po zainstalowaniu ręcznie openldapzrobił to rzeczywiście działa.


0

Naprawiłem to, instalując ponownie Homebrew

Odinstaluj

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

zainstalować

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


0

Czy istnieje prosty sposób to naprawić?

Właśnie użyłem brew upgrade <the tool>. W moim przypadku brew upgrade tmux.


0

Napotkałem problem z awarią aplikacji cytujący błąd SIGABRT w wątku. Przegląd awarii nie jest ładowany i biblioteka nie jest ładowana, a obraz nie znalazł czegoś takiego.

Było to widoczne w Xcode 9.3. Dowiedziałem się, że Xcode nie pobiera bibliotek dynamicznie, więc musiałem to zrobić ręcznie, co rozwiązało mój problem z awarią.

Wykonaj poniższe kroki:

  1. Przejdź do Fazy kompilacji
  2. Naciśnij przycisk „+” u góry i wybierz „Nowa faza kopiowania pliku”
  3. Wybierz Destination as Frameworks i naciśnij przycisk „+” poniżej, aby dodać pliki.
  4. Wybierz Dodaj inne poniżej, kliknij CMD + SHIFT + G i wklej poniższą ścieżkę, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Teraz będziesz mógł zobaczyć kilka szybkich bibliotek. Wybierz wszystkie biblioteki z rozszerzeniem .dylib i kliknij Otwórz.

Zostaną one dodane do osadzonych plików binarnych na karcie ogólnej aplikacji.

Utwórz nową grupę w folderze projektu i dodaj wszystkie te biblioteki.

Teraz uruchom aplikację.


0

Jeśli używasz środowiska Conda w terminalu, zaktualizuj samtools, aby je rozwiązać.

conda install -c bioconda samtools


0

Na odpowiedź najlepszą odpowiedzią powyżej sprawdź najpierw, jaka jest wydajność

otool -L

A następnie wykonaj następujące czynności, jeśli są niepoprawne

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

I

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"

0

to powinno rozwiązać problem

brew update
brew upgrade
brew cleanup

1
Dodaj wyjaśnienie do swojej odpowiedzi, aby inni mogli się z niej uczyć
Nico Haase


-1

Dla każdego, kto nadal może mieć ten problem:

Jest to ciągły problem ze strony Apple, a to, co działało dla mnie, to aktualizacja do iOS 13.4 (beta). Zainstalowałem to i działało jak urok.


to nie jest problem z IOS.
JBarros35
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.