install-name-tool не добавляет путь к библиотеке при просмотре через otool?

Я закончил свое приложение Mac, используя Xcode и Qt. Теперь я хотел бы подготовить его к развертыванию на других компьютерах. Для этого я использовал macdeployqt.

Я только что создал пакет приложений с macdeployqt. Однако некоторые библиотеки отсутствуют. Я пытался следовать [этому] [1] ответу. Оказывается, мне нужно скопировать недостающий файл dylib со своего компьютера в .app, а затем запустить средство установки имени. Я еще не получил инструмент для установки имени, так как я не совсем понимаю, как его использовать -id или же -change с этим особенно в моем текущем сценарии. Мне даже нужно это использовать? Вот что я сделал до сих пор.

Шаг 1: Запуск macdeployqt — это программа, которая поставляется с Qt и встраивает необходимые требования qt в приложение.

> /Users/Guest/Qt/5.5/clang_64/bin/macdeployqt project2.app

Шаг 2: Затем я решил запустить otool для фактически сгенерированного двоичного файла приложения

> 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)

Шаг 3:
Однако я заметил, что в моем project2.app/Contents/Frameworks нет этих библиотек. Поэтому я решил скопировать их вручную.

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

Не могли бы вы сказать мне, какими должны быть мои дальнейшие действия после копирования этих файлов?

Это вывод, который я получаю, когда пытаюсь запустить приложение на другом компьютере без использования 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

Обновить:

После некоторой борьбы я решил сделать следующее

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

Это, похоже, не решило проблему, как когда я сделал это с одной из библиотек, которые я только что добавил.

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)

Я до сих пор не получаю пути к библиотекам libOpenThreads.20.dylib , libosgUtil.141.dylib and libosg.141.dylib любые предложения будут более чем приветствоваться.

2

Решение

libosg.141.dylib это дилиб, который вы включаете в свое встроенное приложение.

Вы должны на самом деле заглянуть в двоичный файл вашего приложения … то есть:

otool -L /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2

Что касается сброса пути к библиотеке, чтобы указать на «@executable_path/../Frameworks/libosg.141.dylib«вместо дизлиба в»/usr/local/lib«попробуйте сделать это:

install_name_tool -change libosg.141.dylib @executable_path/../Frameworks/libosg.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]