¿install-name-tool no agrega ruta a la biblioteca cuando se ve a través de otool?
Terminé mi aplicación mac usando Xcode y Qt. Ahora me gustaría prepararlo para su implementación en otras Mac. Para hacer eso utilicé macdeployqt.
Acabo de crear un paquete de aplicaciones con macdeployqt. Sin embargo, faltan algunas de las bibliotecas. Intenté seguir [esta] [1] respuesta. Resulta que necesito copiar el dylib faltante de mi computadora a la .app y luego ejecutar la herramienta de instalación de nombre. Todavía no he llegado a la herramienta de nombre de instalación, ya que estoy confundido sobre cómo usar-id
o-change
con esto especialmente en mi escenario actual. ¿Necesito usarlo? Esto es lo que hice hasta ahora.
Paso 1: Ejecutar macdeployqt: este es un programa que viene con Qt e integra los requisitos necesarios de qt en la aplicación.
> /Users/Guest/Qt/5.5/clang_64/bin/macdeployqt project2.app
Paso 2: Luego decidí ejecutar otool en el binario de la aplicación generada real
> pwd
/Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS
> otool -L project2
project2:
@rpath/libcreatecore_rt.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.5.0, current version 5.5.1)
@rpath/QtConcurrent.framework/Versions/5/QtConcurrent (compatibility version 5.5.0, current version 5.5.1)
@rpath/QtSvg.framework/Versions/5/QtSvg (compatibility version 5.5.0, current version 5.5.1)
/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/libosg.141.dylib (compatibility version 141.0.0, current version 3.5.1)
@executable_path/../Frameworks/libosgDB.141.dylib (compatibility version 141.0.0, current version 3.5.1)
@executable_path/../Frameworks/libosgGA.141.dylib (compatibility version 141.0.0, current version 3.5.1)
@executable_path/../Frameworks/libosgUtil.141.dylib (compatibility version 141.0.0, current version 3.5.1)
@executable_path/../Frameworks/libosgViewer.141.dylib (compatibility version 141.0.0, current version 3.5.1)
@executable_path/../Frameworks/libosgManipulator.141.dylib (compatibility version 141.0.0, current version 3.5.1)
@executable_path/../Frameworks/libOpenThreads.20.dylib (compatibility version 20.0.0, current version 3.3.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1256.14.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
@rpath/libtbb.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbb_debug.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbbmalloc_debug.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbbmalloc_proxy.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbbmalloc_proxy_debug.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbb_preview.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbb_preview_debug.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libquazip.1.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/libprotobuf.9.dylib (compatibility version 10.0.0, current version 10.1.0)
@rpath/QtQml.framework/Versions/5/QtQml (compatibility version 5.5.0, current version 5.5.1)
@rpath/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.5.0, current version 5.5.1)
@rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.5.0, current version 5.5.1)
@rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.5.0, current version 5.5.1)
@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.5.0, current version 5.5.1)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
Paso 3: Sin embargo, noté que mi project2.app/Contents/Frameworks no tiene esas bibliotecas dentro de ellas. Entonces decidí copiarlos manualmente.
cp /usr/local/lib/libosg.141.dylib project2.app/Contents/Frameworks/libosg.141.dylib
cp /usr/local/lib/libosgDB.141.dylib project2.app/Contents/Frameworks/libosgDB.141.dylib
cp /usr/local/lib/libosgGA.141.dylib project2.app/Contents/Frameworks/libosgGA.141.dylib
cp /usr/local/lib/libosgUtil.141.dylib project2.app/Contents/Frameworks/libosgUtil.141.dylib
cp /usr/local/lib/libosgViewer.141.dylib project2.app/Contents/Frameworks/libosgViewer.141.dylib
cp /usr/local/lib/libosgManipulator.141.dylib project2.app/Contents/Frameworks/libosgManipulator.141.dylib
cp /usr/local/lib/libOpenThreads.20.dylib project2.app/Contents/Frameworks/libOpenThreads.20.dylib
¿Podría decirme cuáles deberían ser mis próximos pasos después de copiar esos archivos?
Este es el resultado que obtengo cuando intento ejecutar la aplicación en otra computadora sin usar install_name_tool
Dyld Error Message:
Library not loaded: libosgUtil.141.dylib
Referenced from: /Users/one/Desktop/project2.app/Contents/Frameworks/libosgDB.141.dylib
Reason: image not found
Binary Images:
0x7fff6c436000 - 0x7fff6c46c837 dyld (353.2.1) <65DCCB06-339C-3E25-9702-600A28291D0E> /usr/lib/dyld
Actualizar:
Después de algunas dificultades, decidí hacer lo siguiente
install_name_tool -change libosg.141.dylib @executable_path/../Frameworks/libosg.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
install_name_tool -change libosgDB.141.dylib @executable_path/../Frameworks/libosgDB.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
install_name_tool -change libosgGA.141.dylib @executable_path/../Frameworks/libosgGA.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
install_name_tool -change libosgUtil.141.dylib @executable_path/../Frameworks/libosgUtil.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
install_name_tool -change libosgViewer.141.dylib @executable_path/../Frameworks/libosgViewer.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
install_name_tool -change libosgManipulator.141.dylib @executable_path/../Frameworks/libosgManipulator.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
install_name_tool -change libOpenThreads.20.dylib @executable_path/../Frameworks/libOpenThreads.20.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
Eso no pareció resolver el problema, ya que cuando hice esto en una de las bibliotecas que acababa de agregar.
otool -L libosgDB.141.dylib
libosgDB.141.dylib:
@executable_path/../Frameworks/libosgDB.141.dylib (compatibility version 141.0.0, current version 3.5.1)
libosgUtil.141.dylib (compatibility version 141.0.0, current version 3.5.1) <-----!!!Why did this not change!!!!!
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 157.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
libosg.141.dylib (compatibility version 141.0.0, current version 3.5.1) <-----!!!Why did this not change!!!!!
libOpenThreads.20.dylib (compatibility version 20.0.0, current version 3.3.0)<-----!!!Why did this not change!!!!!
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1256.14.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1256.1.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
Todavía no consigo caminos para las bibliotecas.libOpenThreads.20.dylib , libosgUtil.141.dylib and libosg.141.dylib
cualquier sugerencia sería más que bienvenida.