Tengo una colección de proyectos que estoy compilando como bibliotecas dinámicas. Cada uno de estos .dylibs depende de otros varios .dylibs que me gustaría colocar en varios otros directorios (es decir, algunos en la ruta del ejecutable, algunos en la ruta del cargador, otros en una ruta fija).¿Cómo establecer correctamente las rutas de ejecución, las rutas de búsqueda y los nombres de instalación?
Cuando ejecuto otool -L
en las bibliotecas compiladas, obtengo una lista de rutas a esas dependencias, pero sé cómo se están estableciendo/determinando las rutas. Casi parecen pseudoaleatorios. Pasé horas jugando con las "Configuraciones de compilación" en Xcode para tratar de cambiar estas rutas (w/@rpath, @executable_path, @loader_path, etc.) pero parece que no puedo cambiar nada (como se comprueba al ejecutar otool -L
) Ni siquiera estoy del todo seguro de dónde agregar estas banderas y realmente no entiende la diferencia entre el siguiente o el uso correcto de ellos:
Vinculación - "Dynamic Library Instalar Nombre"
Linking - "RUNPATH rutas de búsqueda "
Vinculación - 'Otras banderas linking'
rutas de búsqueda - 'Biblioteca de la búsqueda de rutas'
Cuando corro install_name_tool -change
en las diferentes bibliotecas, soy capaz de cambiar con éxito las rutas de búsqueda de ruta de ejecución (de nuevo como se verifica mediante la ejecución otool -L
para confirmar).
Estoy ejecutando Xcode 4.2 y estoy muy cerca de darme por vencido y solo usar un script de post-construcción que ejecute install_tool_name para hacer los cambios. Pero es una solución de hack kludge y preferiría no hacerlo.
¿Dónde puedo ver cómo se están configurando las rutas de búsqueda/ejecución para las dependencias de dylib?
¿Alguien tiene alguna idea sobre lo que podría estar haciendo mal?
Aunque no es la respuesta exacta que estaba buscando, esto me ayudó a identificar mi problema. 'otool -L' enumera todos los nombres de instalación. El primer 'nombre de instalación' enumerado es el de la biblioteca en sí. Cualquier ruta adicional enumerada es para sus dependencias. Suponiendo que haya compilado las dependencias de la fuente, configurar el "Nombre de instalación de la biblioteca dinámica" en Xcode establecerá correctamente estas rutas. Sin embargo, en mi caso, las dependencias son de terceros, por lo que las rutas ya estaban establecidas. Como no tengo control sobre la compilación de las bibliotecas de terceros, me veo obligado a usar 'install_name_tool -change'. – BigMacAttack
Me alegra que te hayas dado cuenta. –
respuesta muy útil. – Ahmed