Создайте файл dmg для приложения qt, используя macdeployqt

В настоящее время я создал файл «dmg» с помощью macdeployqt и обнаружил следующую ошибку.

   Dyld Error Message:
      Library not loaded: @executable_path/../Frameworks/libosg.141.dylib
      Referenced from: /Users/USER/*/myApp2.app/Contents/MacOS/MyApp2
      Reason: image not found

Затем я наткнулся на этот пост @cristopher bruns, который объяснил ситуацию. По сути, мне нужно было добавить libosg.141.dylib в приложение, а затем добавить все библиотеки, от которых зависело libosg.141.dylib. Так, например, libosg.141.dylib зависит от следующих 13 файлов.

> otool -L /usr/local/lib/libosgDB.dylib
/usr/local/lib/libosgDB.dylib:
    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)
    /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)
    libOpenThreads.20.dylib (compatibility version 20.0.0, current version 3.3.0)
    /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)

Мой вопрос: нужно ли мне добавлять все эти 13 файлов в приложение? Как глубоко мне нужно идти? Как я мог знать, когда остановиться. Так как каждый из этих файлов может иметь свои собственные зависимости?


person MistyD    schedule 03.02.2016    source источник


Ответы (1)


Нет, вам нужно только обновить расположение зависимостей для библиотек, которые не находятся в расположениях по умолчанию, таких как libosg.141.dylib

Стандартные библиотеки фреймворка будут существовать на каждом компьютере в одном и том же месте, поэтому приложение может ссылаться на них во время выполнения.

Поэтому вам не нужно изменять такие записи, как:

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

Такие библиотеки, как libosgDB.141.dylib, libosgUtil.141.dylib, libosg.141.dylib и libOpenThreads.20.dylib, необходимо настроить с помощью install_name_tool.

Инструменты, используемые для развертывания, объясняются здесь.

person TheDarkKnight    schedule 03.02.2016