La pregunta está en el título, pero de todos modos, me explico un poco más:
El más aceptado para la correcta definición de la instalación nombre para un dylib en MacOS es por lo que es relativa a la rpath
. Por ejemplo:
otool -L ./LLVM/7.0.0/lib/libomp.dylib
./LLVM/7.0.0/lib/libomp.dylib:
@rpath/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.50.2)
Aquí, libomp.dylib
ha @rpath/libomp.dylib
como instalar nombre. Hasta ahora tan bueno.
El problema es cuando se crea un ejecutable enlazado a un dylib. Incluso si usted pasa la correcta -L/path/to/libomp.dylib
indicador en tiempo de vínculo, de modo que ld
puede con éxito vincular el ejecutable, a continuación, intente ejecutar, y, obviamente, se obtiene lo siguiente:
dyld: Library not loaded: @rpath/libomp.dylib
Referenced from: mydumbexecutable
Reason: image not found
Abort trap: 6
Por supuesto, esto puede ser corregido mediante el uso de install_name_tool
sobre el dylib (cambiando su instale el nombre para que no dependen de la rpath
, y el enlace con el archivo ejecutable de nuevo, pero esto no es considerado una buena práctica), o bien, la forma recomendada, para uso install_name_tool
sobre el ejecutable, añadiendo a ella la correcta rpath
de modo que el dylib se puede encontrar.
Pero... solo me pregunto... ¿no hay un indicador en ld
que agrega automáticamente el rpath
para usted? Quiero decir, si ld
es capaz de enlazar el archivo ejecutable, ya que se hizo encontrar el dylibs, ¿por qué no puede almacenar automáticamente la correcta rpath
en el ejecutable?
Entiendo que esto debe ser opcional comportamiento, como a veces se prefiere definir el rpaths
de ti mismo, pero... una bandera para hacerlo automáticamente iba a hacer mi vida mucho más fácil.