xcode linker dylib

Xcode sigue buscando dylib en el camino equivocado



linker (3)

Ese es mi error:

dyld: Library not loaded: /usr/local/lib/libofa.0.dylib Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test Reason: image not found

Investigué un poco y cambié la ruta dentro de dylib con install_name_tool:

davids-macbook:Test david$ otool -L libofa.0.0.0.dylib libofa.0.0.0.dylib: @executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1) /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)

Pero Xcode sigue buscándolo en / usr / lib /:

build/Debug/Test.app/Contents/MacOS/Test: /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0) /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0) /opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) @executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0) /System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0) /opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0) /System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0) /opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0) /usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0) /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0)

¿Hay alguna manera de configurar esto en Xcode? Gracias

Editar: La biblioteca no es un proyecto de Xcode. Su construcción con ./configure; hacer


Antes de buscar una solución, debe saber qué hay de nuevo con la biblioteca dependiente "dylib" en MAC, en comparación con la biblioteca dependiente "dll" en Windows.

La principal diferencia en dylib vs dll es "nombre de instalación". El nombre de instalación es una ruta de acceso a la biblioteca dinámica que indica dónde encontrar la biblioteca en tiempo de ejecución. No importa dónde copie sus dylibs, siempre apuntará a la ruta anterior (excepto sin cambiar el nombre de la instalación). Puede conocer la ruta de búsqueda original (nombre de instalación) usando el comando como se muestra a continuación

otool -L a.dylib

(simplemente arrastre dylib en lugar de a.dylib)

Para obtener más detalles sobre el nombre de la instalación, consulte el enlace: http://www.chilkatforum.com/questions/4235/how-to-distribute-a-dylib-with-a-mac-os-x-application

Ahora, la solución para cambiar la nueva ubicación para dylib ("nombre de instalación") es simplemente usar install_name_tool como se muestra a continuación

install_name_tool -change old path of dylb new path of dylib

puede obtener la ruta anterior mediante el comando de otool -L descrito anteriormente (ruta anterior, es decir, la ruta original)

"install_name_tool -change" puede cambiar la ruta de búsqueda de dylib y ejecutable también.

Puede usar esto en Xcode escribiendo en el archivo "Ejecutar script" en su proyecto.


Asegúrese de instalar las herramientas de línea de comando de developer.apple.com y luego agregue la biblioteca en su proyecto. Ejecute la siguiente secuencia de comandos en su Xcode: Objetivos »Fases de compilación» Ejecutar script y simplemente ejecutar:

install_name_tool -id @executable_path/../Frameworks/librayName.dylib "$SRCROOT/librayName.dylib"

Nota: NO ''o "" requerido antes del nombre de dylib


Normalmente lo que hago es esto:

  1. Establezca el directorio de instalación de la biblioteca en @rpath . Esto establecerá el nombre de instalación en @rpath/libofa.0.0.0.dylib . Si está construyendo la biblioteca usted mismo, puede configurar esto en Xcode; de lo contrario, use install_name_tool para cambiarlo.
  2. Establezca las rutas de búsqueda de Runpath de la aplicación utilizando la biblioteca a la ubicación del directorio que contiene la biblioteca. Por ejemplo, si coloca la biblioteca en el directorio de Frameworks de la aplicación, debe establecer Rutas de búsqueda en @executable_path/../Frameworks en @executable_path/../Frameworks (o @loader_path/../Frameworks ).

Esta publicación de blog y esta entrarán en más detalles.