TL; DR¿Cómo puedo obtener Xcode para vincular y depurar una aplicación con Boost Filesystem?
Objective-C aplicación vinculada con la biblioteca estática que enlaces dinámicos Boost del sistema de archivos. La aplicación se puede ejecutar desde el directorio de salida usando Terminal, pero al tratar de ejecutar desde el depurador de Xcode o Finder se obtiene el error dyld: Library not loaded: libboost_filesystem.dylib <snip> Reason: image not found
.
Problema
En mi proyecto de Xcode tengo una estructura que se parece a esto:
MainProject (Objective-C)
- static_lib_that_uses_filesystem (C++)
para tener todo para enlazar, añadí libboost_system y libboost_filesystem dylibs a la "Enlace binario con Bibliotecas "fase de construcción en MainProject.
Cuando trato de ejecutar la aplicación de cualquiera de Xcode o el Finder me sale:
sharedlibrary apply-load-rules all
warning: Unable to read symbols for libboost_filesystem.dylib (file not found).
warning: Unable to read symbols from "libboost_filesystem.dylib" (not yet mapped into memory).
warning: Unable to read symbols for libboost_system.dylib (file not found).
warning: Unable to read symbols from "libboost_system.dylib" (not yet mapped into memory).
[Switching to process 43957 thread 0x0]
dyld: Library not loaded: libboost_filesystem.dylib
Referenced from: /Users/ssteele/Library/Developer/Xcode/DerivedData/MainProject-dqrhyuarllykslftblocjdzxlran/Build/Products/Debug/MainProject.app/Contents/MacOS/MainProject
Reason: image not found
que añade una etapa de generación para copiar los dylibs al directorio Marcos en el haz, esto no ayuda. Cambié esto para copiarlos al directorio de Ejecutables que tampoco me ayudó.
Tenerlos en el directorio de Ejecutables hace me permite ejecutar la aplicación desde la Terminal.
¿Cómo puedo obtener la aplicación para encontrar los dylibs cuando se ejecuta desde Finder/Xcode?
antecedente
estoy usando Xcode 4.2 en León y en la actualidad centrarse exclusivamente en León. Construí mis bibliotecas compartidas de sistema de archivos como esto:
./b2 threading=multi macosx-version=10.7 --with-filesystem stage
Esto crea libboost_system.dylib, libboost_filesystem.dylib, y también .a equivalentes en el directorio de la etapa/lib, los estoy haciendo referencia en el proyecto directamente desde allí .
salida de otool -l incluye: 'comando Cargar 11 LC_LOAD_DYLIB cmd cmdsize 56 nombre libboost_filesystem.dylib (offset 24) tiempo sello 2 jue 1 ene 01:00:02 1970 versión actual 0.0.0 compatibilidad versión 0.0.0' –
Me pregunto si ese nombre debe incluir una @ referencia de algún tipo, como '@ executable_path/libboost_filesystem.dylib' . No puedo hacer que eso ocurra sin embargo. –