macos - dyld: Biblioteca no cargada... Motivo: Imagen no cargada
dylib otool (11)
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 que ver con que el ejecutable solo mire en el directorio en el que está, ya que cuando pego el ''libboost_atomic.dylib'' allí, ya no le importa. Desafortunadamente, luego se queja de que no puede encontrar la próxima biblioteca de impulso.
¿Hay alguna manera fácil de arreglar esto?
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 libboost_xxx.dylib
, hacer:
$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile
y finalmente verifique el uso de otool
nuevamente:
$ 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
EDITAR Aunque esto no necesariamente se relaciona con bibliotecas de terceros (como boost o Qt), si está generando la aplicación y .dylib
desde el mismo proyecto de Xcode, puede hacerlo sin usar install_name_tool
configurando el nombre de instalación de Dynamic Library. dentro de la configuración de compilación. Aquí hay un ejemplo que permite que el ejecutable de la aplicación cargue el .dylib
desde ../Frameworks/
:
Esto funcionó para mí:
brew upgrade node
Llegué aquí tratando de ejecutar un programa que acabo de compilar usando CMake. Cuando intento ejecutarlo, se queja diciendo:
dyld: Library not loaded: libboost_system.dylib
Referenced from: /Users/path/to/my/executable
Reason: image not found
Evité el problema de decirle a CMake que use la versión estática de Boost, en lugar de dejar que use la dinámica:
set(Boost_USE_STATIC_LIBS ON)
Lo arreglo por brew install libpng
Me enfrenté al problema de bloqueo de aplicaciones citando el error SIGABRT en el hilo. La vista general del bloqueo es una biblioteca dyld no cargada y la imagen no encontró algo así.
Esto se vio en la versión de xcode 9.3. La razón por la que me enteré fue 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: Paso 1: vaya a Fases de compilación Paso 2: presione el botón ''+'' en la parte superior y seleccione "Nueva fase de archivo de copia" Paso 3: Seleccione destino como marcos y presione el botón ''+'' a continuación para agregar archivos . Paso 4: Seleccione Agregar otro a continuación, haga clic en CMD + MAYÚS + G y pegue la siguiente ruta, /Aplicaciones/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos
Ahora podrá ver algunos dylibs rápidos, seleccionar todas las bibliotecas rápidas con la extensión .dylib y hacer 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.
Happy Coding
Obtuve este error cuando intenté instalar Ruby 2.3.1 usando rvm. Primero me dijo que ejecutara la brew update
, lo cual hice, y luego, cuando intenté ejecutar rvm install ruby-2.3.1
, recibí el error en esta pregunta de SO.
La solución fue ejecutar primero la brew upgrade
, aparentemente de acuerdo con esta pregunta de superuser.com que necesita para hacer tanto la brew update
brew upgrade
. Una vez hecho esto, finalmente pude instalar Ruby 2.3.1.
Para algunos, esto podría ser tan fácil como establecer la ruta del sistema para las bibliotecas dinámicas. En OS X, esto es tan simple como establecer la variable de entorno DYLD_LIBRARY_PATH
. Ver:
¿Está bien utilizar DYLD_LIBRARY_PATH en Mac OS X? Y, ¿cuál es el algoritmo dinámico de búsqueda de la biblioteca con él?
Para cualquiera que venga a esta página porque obtuvo este error al intentar vincular un marco de terceros a su proyecto utilizando 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 rápido. La única forma de arreglar esto para mí era volver a construir el marco.
Otra razón por la que puede 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 con el siguiente aspecto:
establecer la configuración de compilación Contenido incrustado contiene código Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT) a SÍ en su aplicación
Aquí está el enlace al documento completo de Apple que lo explica here
Puede usar sudo install_name_tool -change
change dylib path And sudo install_name_tool -id
change dylib name
Puede usar el comando otool con la opción -L para el ejecutable, que se mostrará donde el ejecutable espera que estén esas bibliotecas.
Si la ruta de acceso necesita cambiar, use el comando install_name_tool , que le permite establecer la ruta a las bibliotecas.