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ć?
Odpowiedzi:
Znajdź wszystkie biblioteki doładowań:
i dla każdego
libboost_xxx.dylib
wykonaj:i na koniec sprawdź, używając
otool
ponownie: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/local
lub/opt/local
do 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 .
źródło
DYLD_LIBRARY_PATH
zmodyfikowanie ścieżki wyszukiwania. Druga odpowiedź ma to.exefile
oznacza plik wykonywalny, który próbujesz uruchomić. W moim przypadku załatwiłem sprawęotool -L /usr/local/bin/php
.W celu
General
zakładce znajduje się sekcja o nazwieFrameworks, Libraries, and Embedded Content
Kliknij
+
znak, dodaj wymagane,framework
a awaria zostanie rozwiązana.źródło
LC_ID_DYLIB
nie muszę tworzyć dowiązania symbolicznego w usr / loca / opt! czy jest jakiś sposób, aby to rozgryźć? : | To bolesne :(To działało dla mnie:
źródło
node
przy użyciu homebrew. Prawdopodobnie inna instalacja zepsuła ścieżkę węzła. Pracował również dla mnie.Po aktualizacji Mac OS do Mojave. Próbowałem zainstalować moduły npm za pomocą
yarn
polecenia Mam błąd:Naprawiono za pomocą:
źródło
node --version
w moim systemie spowodowało ten sam błąd. Uruchomienie dwóch powyższych poleceń rozwiązało mój problem.brew cleanup
polecenie, co warto zrobić, jeśli chcesz pozbyć się starych wersji.brew cleanup
a potem to naprawiłem.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 ustawienie
DYLD_LIBRARY_PATH
zmiennej środowiskowej. Widzieć:Czy można używać DYLD_LIBRARY_PATH na Mac OS X? A jaki jest algorytm dynamicznego przeszukiwania biblioteki?
źródło
DYLD_LIBRARY_PATH
?DYLD_LIBRARY_PATH
. Prawidłowym rozwiązaniem jest dołączenie niestandardowych bibliotek do.app
i 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ą.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ć obabrew update
&&brew upgrade
. Gdy to zrobisz, mogę w końcu zainstalować Ruby 2.3.1.źródło
brew upgrade
takie postępowanie. Może to być ogromnym zaburzeniem dla całego systemu. Zamiast tego wyodrębnij to, co wymaga uaktualnienia, i uaktualnij tylko to.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.
źródło
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ć.
Na początku było to dla mnie mylące, ale teraz ma doskonały sens.
źródło
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:
Ominąłem problem, mówiąc CMake, aby używał statycznej wersji Boost, zamiast pozwalać jej używać dynamicznej:
źródło
Jeśli używasz Xcode 11 i nowszych:
Przejdź do
General
zakładki i dodaj strukturę wFrameworks, Libraries, and Embedded Content
sekcji.Ważny: domyślnie może być oznaczony jako
Do Not Embed
, zmień go naEmbed Without Signing
pokazany na obrazku i możesz zacząć.Dla wersji Xcode poniżej 11:
Po prostu dodaj szkielet w
Embedded Binaries
sekcji i gotowe.Twoje zdrowie!
źródło
Aby rozwiązać poniższy błąd na moim Macbooku Catalina 10.15.4:
Uruchomiłem polecenie poniżej i obejrzałem powyższy problem:
źródło
Rozwiązałem ten problem za pomocą
Product > Clean Build Folder
( CommandShiftK), co sprawia, że nowa czysta kompilacja jest naprawdę dziwna.źródło
Możesz użyć
sudo install_name_tool -change
zmiany ścieżki dylib isudo install_name_tool -id
zmienić nazwę dylibźródło
Naprawiam to
brew install libpng
źródło
Jeśli używasz cmake, dodaj
DYLIB_INSTALL_NAME_BASE "@rpath"
do właściwości docelowych:lub w projekcie biblioteki dynamicznej Xcode Cel -> Ustawienia kompilacji ustaw Dynamiczną bibliotekę Zainstaluj nazwę bazy na @rpath
źródło
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
źródło
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.
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
źródło
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 Content
podpisz platformę za pomocąEmbed & Sign
.Jeśli wybiorę
Do not Embed
lubEmbed Without Signing
zamiast tego pojawia się błąd:źródło
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
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
źródło
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
:Po wypróbowaniu wielu różnych sposobów właśnie uruchomiłem
brew install openldap
i naprawiłem to. Zauważ, że ja już biegłbrew update
, abrew upgrade
jednak dopiero po zainstalowaniu ręcznieopenldap
zrobił to rzeczywiście działa.źródło
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)"
źródło
Właśnie użyłem
brew upgrade <the tool>
. W moim przypadkubrew upgrade tmux
.źródło
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:
/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ę.
źródło
Jeśli używasz środowiska Conda w terminalu, zaktualizuj samtools, aby je rozwiązać.
źródło
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
I
źródło
to powinno rozwiązać problem
źródło
Żadne z powyższych nie działało dla mnie, ale działało
brew reinstall icu4c
.źródło
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.
źródło