dyld: Biblioteca no cargada ... Motivo: Imagen no encontrada

293

Cuando intento ejecutar un ejecutable que me han enviado en Mac OS X, aparece el siguiente error

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

He instalado las bibliotecas de impulso y están ubicadas en /opt/local/lib. Creo que el problema tiene algo que ver con que el ejecutable solo busque en el directorio en el que se encuentra, ya que cuando pego el 'libboost_atomic.dylib' allí, ya no le importa. Desafortunadamente, se queja de que no puede encontrar la próxima biblioteca de impulso.

¿Hay una manera fácil de arreglar esto?

rwolst
fuente
Si aún tiene problemas, utilice el método de este tema
Tarik,

Respuestas:

171

Encuentra todas las bibliotecas de impulso:

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

y para cada uno libboost_xxx.dylib, hacer:

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

y finalmente verifique usando otoolnuevamente:

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

Páginas de manual: otool install_name_tool

EDITAR Hace un tiempo escribí un script de python ( copy_dylibs.py) para resolver todo esto automáticamente al crear una aplicación. Empaquetará todas las bibliotecas desde /usr/localo /opt/localdentro del paquete de aplicaciones y corregirá las referencias a esas bibliotecas para usar @rpath. Esto significa que puede instalar fácilmente una biblioteca de terceros utilizando Homebrew y empaquetarlas con la misma facilidad.

Ahora he hecho público este script en github .

trojanfoe
fuente
44
@trojanfoe, ¿puede explicar aquí cuál es el archivo de ejecución? ¿Es una ruta de archivo de herramienta? ¿no es así?
VenushkaT
1
Después de volver a compilar el ejecutable, tengo que repetir este proceso, bastante molesto durante el desarrollo.
tglas
2
En realidad, la mejor manera es utilizar DYLD_LIBRARY_PATHpara modificar la ruta de búsqueda. La otra respuesta tiene esto.
frankliuao
18
'exefile': No existe tal archivo o directorio
ScottyBlades
2
@ScottyBlades exefilerepresenta el archivo ejecutable que está intentando ejecutar. En mi caso, otool -L /usr/local/bin/phphizo el truco.
brunouno
106

En la Generalpestaña del objetivo , hay una sección llamadaFrameworks, Libraries, and Embedded Content

Haga clic en el +signo, agregue requerido frameworky se resuelve el bloqueo.

Actualizar la última captura de pantalla de xcode

Himanshu padia
fuente
2
¿Qué debo agregar? hay muchos archivos
Joe Sleiman
@Himanshu ¡Tengo libcppreset para mi proyecto! tiene mucha dependencia de boost y ... Ejecuto un script bash para cambiarlos con install_name_tool, pero LC_ID_DYLIBno puedo hacer un enlace simbólico en usr / loca / opt. ¿Hay alguna forma de averiguarlo? : | Es doloroso :(
Mo Farhand
85

Esto funcionó para mí:

brew upgrade node
oshaiken
fuente
77
¿Qué está haciendo esto, sin embargo?
diegoaguilar 01 de
3
@diegoaguilar esto es reinstalar nodeusando homebrew. Probablemente otra instalación rompió la ruta del nodo. También funcionó para mí.
Hugo Nogueira
69

Después de actualizar Mac OS a Mojave. Traté de instalar módulos npm a través del yarncomando Recibí un error:

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

Fue arreglado con:

brew update
brew upgrade
Michael Klishevich
fuente
2
Mi intelliJ comenzó a arrojar este error cuando recientemente actualicé xcode. Estaba tratando de ejecutar un servidor node.js a través de intellij. No estaba seguro de qué salió mal. Ejecutar node --versionen mi sistema resultó en el mismo error. Ejecutar los dos comandos anteriores resolvió mi problema.
Ishan
3
En mi caso, también ejecuté el brew cleanupcomando, que es bueno hacer a veces si quieres deshacerte de las versiones antiguas.
Michael Behrens
Con respecto al comentario de @ MichaelBehrens, corro y brew cleanupluego se solucionó.
Buraco
37

Para algunos, esto podría ser tan fácil como configurar la ruta del sistema para bibliotecas dinámicas. En OS X, esto es tan simple como configurar la DYLD_LIBRARY_PATHvariable de entorno. Ver:

¿Está bien usar DYLD_LIBRARY_PATH en Mac OS X? Y, ¿cuál es el algoritmo de búsqueda dinámica de la biblioteca con él?

markshiz
fuente
Puede parecer estúpido, pero me pregunto qué valor debería establecer DYLD_LIBRARY_PATH.
César
1
@ Caesar Ajústelo en el directorio de donde se encuentren los discos que intenta vincular.
markshiz
No puede esperar que sus usuarios cambien DYLD_LIBRARY_PATH. La solución correcta es incluir bibliotecas no estándar con .appy el usuario no tendrá que hacer nada. Sin embargo, el desarrollador aún puede tener que hackear la ruta del cargador según mi respuesta.
trojanfoe
12

Recibí este error cuando intenté instalar ruby ​​2.3.1 usando rvm. Primero me dijo que corriera brew update, lo cual hice, y luego, cuando intenté correr rvm install ruby-2.3.1, recibí el error en esta pregunta SO.

La solución fue ejecutar primero brew upgrade, aparentemente de acuerdo con esta pregunta de superuser.com , debe hacer ambas brew update&& brew upgrade. Una vez hecho esto, finalmente podría instalar ruby ​​2.3.1.

IonicBurger
fuente
La gente necesita dejar de recomendar hacer brew upgradeasí. Esto puede ser un disruptor masivo para todo el sistema. En cambio, aísle lo que necesita actualizarse y actualícelo solo.
Jivan
7

Puede usar el comando otool con la opción -L para el archivo ejecutable, que mostrará dónde espera el archivo ejecutable esas bibliotecas.

Si es necesario cambiar la ruta a esas, use el comando install_name_tool , que le permite establecer la ruta a las bibliotecas.

El caballero oscuro
fuente
7

Ahora que Xcode ha actualizado su IDE, han cambiado un poco su funcionamiento.

Solía ​​dividirse en una sección separada como se demostró anteriormente con 'Binarios incrustados' y 'Marcos y bibliotecas vinculadas' como secciones separadas.

Ahora, es una sección combinada con menús desplegables a la derecha sobre lo que debe integrarse.

Nuevos cambios de IDE

Esto fue confuso para mí al principio, pero ahora tiene mucho sentido.

Jay Snayder
fuente
5

Llegué tratando de ejecutar un programa que acabo de compilar usando CMake. Cuando trato de ejecutarlo, se queja diciendo:

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

Eludí el problema diciéndole a CMake que usara la versión estática de Boost, en lugar de dejar que usara la dinámica:

set(Boost_USE_STATIC_LIBS ON)
Lucio Paiva
fuente
5

Si está utilizando Xcode 11 en adelante:

Vaya a la Generalpestaña y agregue el marco en la Frameworks, Libraries, and Embedded Contentsección.

Importante: De manera predeterminada, puede estar marcado como Do Not Embed, cámbielo a Embed Without Signingcomo se muestra en la imagen y listo.

ingrese la descripción de la imagen aquí

Para las versiones de Xcode inferiores a 11:

Simplemente agregue el marco en la Embedded Binariessección y ya está.

¡Salud!

atulkhatri
fuente
5

Para resolver el siguiente error en mi 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

Ejecuté el comando a continuación y solucioné el problema anterior:

brew switch openssl 1.0.2s
Kwex
fuente
3

Solucioné este problema usando Product > Clean Build Folder( CommandShiftK), lo que hace que una nueva construcción limpia sea realmente extraña.

Douglas Pfeifer
fuente
2

Puede usar sudo install_name_tool -changecambiar la ruta dylib y sudo install_name_tool -idcambiar el nombre dylib

hailuodev
fuente
2

Lo arreglo por brew install libpng

usuario3835452
fuente
2

Si usa cmake, agregue DYLIB_INSTALL_NAME_BASE "@rpath"a las propiedades de destino:

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 en el proyecto de biblioteca dinámica Xcode Destino -> Configuración de compilación establece la base de nombre de instalación de biblioteca dinámica en @rpath

cn00
fuente
Creo un proyecto de biblioteca dinámica de marco de cacao, funciona, y en comparación con mi proyecto generado por cmake malo, encuentro esto diferente y lo solucioné, funciona en iOS.
cn00
2

si usa virtualenv simplemente elimine la carpeta de su entorno y vuelva a crearla con este comando virtualenv --python=/usr/local/bin/python3 the_name_of_my_env

bormat
fuente
1

Para cualquiera que haya venido a esta página porque recibió este error al intentar vincular un marco de terceros a su proyecto usando Xcode 6.3.1, el problema que encontré fue porque la biblioteca se estaba creando con una versión anterior del compilador usando una versión diferente de veloz. La única forma de solucionar esto fue reconstruir el marco.

Otra razón por la que podría obtener esto se indica en un documento técnico de Apple.

Si está creando una aplicación que no usa Swift pero incorpora contenido como un marco que sí lo hace, Xcode no incluirá estas bibliotecas en su aplicación. Como resultado, su aplicación se bloqueará al iniciarse con un mensaje de error similar al siguiente:

establezca la configuración de compilación Contenido incrustado contiene código rápido (EMBEDDED_CONTENT_CONTAINS_SWIFT) en SÍ en su aplicación

Aquí está el enlace al documento completo de Apple que lo explica aquí.

bolnad
fuente
1

Para mi marco, estaba usando un subproyecto Xcode agregado como un submódulo git.

Creo que recibí este error porque estaba firmando el marco con un equipo de firma diferente a mi aplicación principal. (equipos cambiados por aplicación; olvidé cambiar por marco)

La solución es no firmar dentro del proyecto marco. En cambio, en la Target > General > Frameworks, Libraries, and Embedded Contentsección de la aplicación principal , firme el marco a través de Embed & Sign.

Si selecciono Do not Embedo en su Embed Without Signinglugar obtengo el error:

MARCO no válido para su uso en el proceso mediante Validación de biblioteca: el archivo asignado no tiene cdhash, ¿está completamente sin firmar? El código debe ser al menos ad-hoc firmado.

pkamb
fuente
1

Xcode 11.1 y Swift 5.1

Arreglo rapido

Primero asegúrese de que la biblioteca externa agregada tenga la opción de incrustar seleccionada en la pestaña General, Binarios incrustados.

Si aún no funciona ..

Esto sucede porque tiene versiones diferentes e inigualables de bibliotecas presentes.

Actualiza las vainas

pod update

Importante: Verifique que todas las bibliotecas estén incluidas en la Configuración de compilación -> lista de bibliotecas y marcos y que haya dado la opción de incrustar en la compilación

Simplemente trabajando genial

Saranjith
fuente
0

Para cualquiera que experimente lo mismo con una biblioteca o paquete diferente, @ user3835452 está en el camino correcto. Encontré este mensaje al intentar ejecutar 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

Después de probar muchas formas diferentes, simplemente corrí brew install openldapy lo arreglé. Tenga en cuenta que ya había corrió brew updatey brew upgradepero sólo después de haber instalado manualmente openldaplo hizo realidad el trabajo.

brunouno
fuente
0

Lo arreglé reinstalando Homebrew

Desinstalar

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

Instalar en pc

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

sidonaldson
fuente
0

¿Hay una manera fácil de arreglar esto?

Acabo de usar brew upgrade <the tool>. En mi caso brew upgrade tmux,.

confundido00
fuente
0

Me enfrenté al problema de bloqueo de la aplicación citando el error SIGABRT en el hilo.

Esto se vio en Xcode 9.3. La razón por la que descubrí que Xcode no está recogiendo bibliotecas dinámicamente, así que tuve que hacerlo manualmente, lo que resolvió mi problema de bloqueo.

Siga los pasos a continuación:

  1. Ir a construir fases
  2. Presiona el botón '+' en la parte superior y selecciona "Nueva fase de copia de archivo"
  3. Seleccione Destino como Frameworks y presione el botón '+' a continuación para agregar archivos.
  4. Seleccione Agregar otro a continuación, haga clic en CMD + MAYÚS + G y pegue la siguiente ruta, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Ahora podrá ver algunos dylibs rápidos, seleccione todas las bibliotecas rápidas con la extensión .dylib y haga clic en abrir.

Estos se agregarán a los binarios incrustados en la pestaña general de la aplicación.

Cree un nuevo grupo en la carpeta del proyecto y agregue todas estas bibliotecas.

Ahora ejecuta tu aplicación.

Miya Mirza
fuente
0

Si está utilizando el entorno Conda en la terminal, actualice las samtools para resolverlo.

conda install -c bioconda samtools

Shrm
fuente
0

El mejor se responde arriba, primero verifique cuál es el resultado

otool -L

Y luego haga lo siguiente si es incorrecto

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

Y

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"
sandroid
fuente
0

esto debería solucionar el problema

brew update
brew upgrade
brew cleanup
Walterwhites
fuente
-1

Nada de lo anterior funcionó para mí, pero lo brew reinstall icu4chizo.

Pierre Monico
fuente
-1

Para cualquiera que todavía pueda tener este problema:

Este es un problema continuo por parte de Apple, y lo que funcionó para mí es actualizar a iOS 13.4 (beta). Instalé eso y funcionó como un encanto.

ChiefMalone
fuente
Este no es un problema de iOS.
JBarros35