dyld: libreria non caricata ... Motivo: immagine non trovata


293

Quando provo a eseguire un eseguibile, mi è stato inviato in Mac OS X, ricevo il seguente errore

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

Ho installato le librerie boost e si trovano in /opt/local/lib. Penso che il problema abbia a che fare con l'eseguibile solo guardando nella directory in cui si trova come quando incollo il 'libboost_atomic.dylib' lì, non ci pensa più. Purtroppo poi si lamenta di non riuscire a trovare la prossima libreria boost.

C'è un modo semplice per risolvere questo problema?


Se hai ancora problemi, usa il metodo di questo argomento
Tarik,

Risposte:


171

Trova tutte le librerie boost:

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

e per ciascuno libboost_xxx.dylib, fare:

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

e infine verifica di otoolnuovo usando :

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

Le pagine di manuale: otool install_name_tool

MODIFICA Qualche tempo fa ho scritto uno script Python ( copy_dylibs.py) per elaborare automaticamente tutte queste cose durante la creazione di un'app. Comprimerà tutte le librerie dal /usr/localo /opt/localnel bundle dell'app e correggerà i riferimenti a quelle librerie da utilizzare @rpath. Ciò significa che puoi installare facilmente una libreria di terze parti usando Homebrew e impacchettarli altrettanto facilmente.

Ora ho reso pubblico questo script su github .


4
@trojanfoe puoi per favore spiegare qui qual è l'esempio è un percorso del file exec exec? vero?
VenushkaT

1
Dopo aver ricompilato l'eseguibile, devo ripetere questo processo, piuttosto fastidioso durante lo sviluppo.
Tglas,

2
In realtà il modo migliore è usare DYLD_LIBRARY_PATHper modificare il percorso di ricerca. L'altra risposta ha questo.
frankliuao,

18
'exefile': nessun file o directory
simile

2
@ScottyBlades exefileindica il file eseguibile che si sta tentando di eseguire. Nel mio caso, ha otool -L /usr/local/bin/phpfatto il trucco.
brunouno,

106

Nella Generalscheda del bersaglio , c'è una sezione chiamataFrameworks, Libraries, and Embedded Content

Fare clic sul +segno, aggiungere richiesto frameworke l'arresto anomalo viene risolto.

Aggiorna l'ultima schermata xcode


2
cosa dovrei aggiungere? ci sono molti file
Joe Sleiman,

@Himanshu Ho libcppreset per il mio progetto! ha molta dipendenza da boost e ... corro uno script bash per cambiarli con install_name_tool ma per il non LC_ID_DYLIBho bisogno di fare un link simbolico in usr / loca / opt! c'è un modo per capire? : | È doloroso :(
Mo Farhand,

85

Questo ha funzionato per me:

brew upgrade node

7
Ma cosa sta facendo questo?
diegoaguilar,

3
@diegoaguilar si sta reinstallando nodeusando homebrew. Probabilmente un'altra installazione ha interrotto il percorso del nodo. Ha funzionato anche per me.
Hugo Nogueira,

69

Dopo l'aggiornamento Mac OS a Mojave. Ho provato a installare i moduli npm tramite yarncomando Ho ricevuto un errore:

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

È stato risolto con:

brew update
brew upgrade

2
Il mio intelliJ ha iniziato a lanciare questo errore quando ho aggiornato xcode di recente. Stavo cercando di eseguire un server node.js tramite intellij. Non ero sicuro di cosa fosse andato storto. L'esecuzione node --versionsul mio sistema ha provocato lo stesso errore. L'esecuzione dei due comandi precedenti ha risolto il mio problema.
Ishan,

3
Nel mio caso, ho anche eseguito il brew cleanupcomando, che a volte è utile fare se si desidera eliminare le versioni precedenti.
Michael Behrens,

Per quanto riguarda il commento di @ MichaelBehrens, corro e brew cleanuppoi risolto.
Buraco,

37

Per alcuni, potrebbe essere facile come impostare il percorso di sistema per le librerie dinamiche. Su OS X, questo è semplice come impostare la DYLD_LIBRARY_PATHvariabile d'ambiente. Vedere:

È corretto utilizzare DYLD_LIBRARY_PATH su Mac OS X? E qual è l'algoritmo di ricerca dinamica della libreria con esso?


Può sembrare stupido, ma mi chiedo quale valore dovrei impostare DYLD_LIBRARY_PATH?
Cesare,

1
@Caesar Impostalo nella directory in cui si trovano i dylibs che stai cercando di collegare.
markshiz,

Non puoi aspettarti che i tuoi utenti cambino DYLD_LIBRARY_PATH. La soluzione corretta è quella di includere librerie non standard con .appe l'utente non dovrà fare nulla. Lo sviluppatore, tuttavia, potrebbe ancora dover hackerare il percorso del caricatore secondo la mia risposta.
trojanfoe,

12

Ho avuto questo errore quando ho provato a installare ruby ​​2.3.1 usando rvm. Prima mi ha detto di correre brew update, cosa che ho fatto, e poi quando ho provato a correre rvm install ruby-2.3.1, ho ricevuto l'errore in questa domanda SO.

La soluzione era eseguire prima brew upgrade, apparentemente secondo questa domanda di superuser.com devi fare entrambe le cose brew update&& brew upgrade. Una volta fatto ciò, ho finalmente potuto installare Ruby 2.3.1.


Le persone devono smettere di raccomandare di fare brew upgradeproprio così. Questo può essere un grosso disgregatore per l'intero sistema. Invece, isola ciò che deve essere aggiornato e aggiornalo solo.
Jivan,

7

È possibile utilizzare il comando otool con l'opzione -L per l'eseguibile, che visualizzerà dove l'eseguibile si aspetta che siano quelle librerie.

Se è necessario modificare il percorso per quelli, utilizzare il comando install_name_tool , che consente di impostare il percorso per le librerie.


7

Ora che Xcode ha aggiornato il proprio IDE, ha cambiato un po 'il modo in cui funziona.

In precedenza era suddiviso in sezioni separate, come dimostrato sopra con "Binari incorporati" e "Strutture e librerie collegate" come sezioni separate.

Ora, è una sezione combinata con i menu a discesa sulla destra su ciò che dovrebbe essere incorporato.

Nuove modifiche IDE

Questo all'inizio mi ha confuso, ma ora ha perfettamente senso.


5

Sono arrivato qui cercando di eseguire un programma che ho appena compilato usando CMake. Quando provo a eseguirlo, si lamenta dicendo:

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

Ho aggirato il problema dicendo a CMake di usare la versione statica di Boost, invece di lasciarla usare quella dinamica:

set(Boost_USE_STATIC_LIBS ON)

5

Se stai usando Xcode 11 in poi:

Vai alla Generalscheda e aggiungi il framework inFrameworks, Libraries, and Embedded Content sezione.

Importante: per impostazione predefinita, potrebbe essere contrassegnato come Do Not Embed, modificalo Embed Without Signingcome mostrato nell'immagine e sei a posto.

inserisci qui la descrizione dell'immagine

Per versioni Xcode inferiori a 11:

Aggiungi il framework in Embedded Binaries sezione e il gioco è fatto.

Saluti!


5

Per risolvere l'errore di seguito sul mio 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

Ho eseguito il comando di seguito e ho risolto il problema sopra:

brew switch openssl 1.0.2s

3

Ho risolto questo problema usando Product > Clean Build Folder( CommandShiftK), il che rende una nuova build pulita, davvero strana.


2

Puoi usare sudo install_name_tool -changecambia percorso dylib E sudo install_name_tool -idcambia nome dylib



2

Se usi cmake, aggiungi DYLIB_INSTALL_NAME_BASE "@rpath"alle proprietà target:

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

o nel progetto di libreria dinamica Xcode Destinazione -> Imposta configurazione imposta Libreria dinamica Installa nome base su @rpath


Creo un progetto di libreria dinamica di framework di cacao, funziona e, rispetto al mio progetto generato da cmake, trova questo diverso e, risolto, funziona su iOS.
CNN

2

se usi virtualenv basta rimuovere la cartella del tuo ambiente e ricrearla con questo comando virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

Per chiunque venga su questa pagina perché ha riscontrato questo errore nel tentativo di collegare un framework di terze parti al proprio progetto utilizzando Xcode 6.3.1, il problema che ho riscontrato è stato perché la libreria veniva creata con una versione precedente del compilatore utilizzando una versione diversa di rapido. L'unico modo per risolvere questo problema per me era ricostruire il framework.

Un altro motivo per cui potresti ottenerlo è indicato in un documento tecnico Apple.

Se stai creando un'app che non utilizza Swift ma incorpora contenuti come un framework, Xcode non includerà queste librerie nella tua app. Di conseguenza, l'app si arresterà in modo anomalo all'avvio con un messaggio di errore simile al seguente:

imposta l'impostazione di build del contenuto incorporato Contiene codice Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT) su YES nella tua app

Ecco il link al documento Apple completo che lo spiega qui


1

Per il mio framework stavo usando un sottoprogetto Xcode aggiunto come sottomodulo git.

Credo che stavo ricevendo questo errore perché stavo firmando il framework con un team di firma diverso rispetto alla mia app principale. (cambiato team per app; dimenticato di passare a framework)

La soluzione è non firmare all'interno del progetto quadro. Invece, nella Target > General > Frameworks, Libraries, and Embedded Contentsezione dell'app principale , firmare il framework tramite Embed & Sign.

Se seleziono Do not Embedo Embed Without Signinginvece visualizzo l'errore:

FRAMEWORK non valido per l'uso nel processo tramite Convalida libreria: il file mappato non ha cdhash, completamente senza segno? Il codice deve essere firmato almeno ad hoc.


1

Xcode 11.1 e Swift 5.1

Soluzione rapida

Per prima cosa assicurati che la libreria aggiunta esterna abbia l'opzione embed selezionata in General Tab, Embbed Binaries.

Se ancora non funziona ..

Ciò accade perché sono presenti versioni diverse e senza pari delle librerie.

Aggiorna i pod

pod update

Importante: controlla che tutte le librerie siano incluse in Impostazioni build -> elenco librerie e framework e hai dato la possibilità di incorporare nella build

Funziona alla grande


0

Per chiunque provi la stessa cosa con una libreria o un pacchetto diversi, @ user3835452 è sulla buona strada. Ho trovato questo messaggio durante il tentativo di eseguire 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

Dopo aver provato molti modi diversi ho appena corso brew install openldape l'ho risolto. Si noti che avevo già eseguito brew updatee brew upgradeche solo dopo l'installazione manuale openldapfunzionava davvero.


0

Ho risolto il problema reinstallando Homebrew

Disinstallare

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

Installare

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


0

C'è un modo semplice per risolvere questo problema?

Ho appena usato brew upgrade <the tool>. Nel mio caso brew upgrade tmux,.


0

Ho riscontrato il problema di arresto anomalo dell'app citando l'errore SIGABRT nel thread. La panoramica dell'arresto è una libreria dyld non caricata e l'immagine non ha trovato qualcosa del genere.

Questo è stato visto in Xcode 9.3. Il motivo per cui ho scoperto che Xcode non sta raccogliendo le librerie in modo dinamico, quindi ho dovuto farlo manualmente per risolvere il mio problema di crash.

Segui i passaggi seguenti:

  1. Vai a Costruire fasi
  2. Premi il pulsante '+' in alto e seleziona "Fase nuova copia file"
  3. Seleziona Destinazione come quadri e premi il pulsante '+' in basso per aggiungere file.
  4. Seleziona Aggiungi altro in basso, fai clic su CMD + MAIUSC + G e incolla il percorso seguente, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Ora sarai in grado di vedere alcuni veloci dylibs, Seleziona tutte le librerie veloci con estensione .dylib e fai clic su Apri.

Questi verranno aggiunti ai file binari incorporati nella scheda generale dell'app.

Crea un nuovo gruppo nella cartella del progetto e aggiungi tutte queste librerie.

Ora esegui la tua app.


0

Se si utilizza l'ambiente Conda nel terminale, aggiornare i samtools per risolverlo.

conda install -c bioconda samtools


0

La migliore risposta è sopra prima controlla qual è l'output di

otool -L

E quindi fare quanto segue se errato

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

E

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"

0

Questo dovrebbe risolvere il problema

brew update
brew upgrade
brew cleanup

-1

Nessuna delle precedenti ha funzionato per me, ma brew reinstall icu4cha funzionato.


-1

Per chiunque possa ancora avere questo problema:

Questo è un problema in corso da parte di Apple e ciò che ha funzionato per me è l'aggiornamento a iOS 13.4 (beta). Installato e funzionato come un fascino.


questo non è un problema IOS.
JBarros35
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.