2014-11-17 6 views
0

Я пытаюсь развернуть приложение Qt, который использует помощника, чтобы показать помощь, на макинтош (OS X 10.6-10.9, Qt 4,8)Как развернуть помощник с моим приложением на Mac без развертывания нескольких копий Qt Frameworks?

QStringList args = "-collectionFile " + "my_help_file"; 
QString app = "path/"+"Assistant.app"; 
m_helpProcess->start(app, args); 

Я поместил Assistant.app в папке ресурсов.

Поскольку я развернуть приложение на систему без Qt установлен, я поместил все, что он зависимости QT в содержании/рамочных, и побежал install_name_tool

# for QtCore: 
install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Version/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore 
install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/MacOs/xxx 

install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Resources/Assistant.app/Contents/MacOS/Assistant 

приложение получает его, он является функциональным, но помощник Безразлично Очевидно, это другой уровень.

Я не хочу, чтобы разместить несколько копий базы ... кроме того, я уверен, что конфликты будут, если я делаю ...

Вызов помощника без его связка не работает ... (Я хотел бы, чтобы поместить исполняемый файл рядом с ххм исполняемым)

так как я предполагаю, что я установить идентификатор для Каркасов в один каталог вниз от @executable_path, я не могу сказать, помощи, чтобы посмотреть в другом месте ...

Как правильно связать помощника с Framework?

Примечание: Я пробовал:

# for QtCore: 
install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Version/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore 
install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/MacOs/xxx 

install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../../../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Resources/Assistant.app/Contents/MacOS/Assistant 

Не нашли библиотеки ... Я предполагаю, что идентификатор должен соответствовать пути ... но для одного экземпляра Lib, он просто не может ...

Я также попытался сделать символическую ссылку (псевдоним?) В библиотеке Qt в том месте, где будет выглядеть помощник ... Он пытался и не смог, жалуясь на искаженный файл.

Update, чтобы ответить на комментарий:

Запуск otool -L на помощнике в помощнике узелка в папке Resources:

@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore 

и помощник не может найти библиотеку, которая на самом деле является на

@executable_path/../../../Frameworks/QtCore.framework/Versions/4/QtCore 
+1

Идентификатор рамки используется только во время соединения. Динамическому загрузчику все равно, что он находится во время загрузки. Ваш второй набор команд 'install_name_tool' должен был работать. Вы связались с '-headerpad_max_install_names'? Если нет, возможно, недостаточно места для хранения нового пути в командах загрузчика. Что делает «otool -L» применительно к исполняемому файлу из списка Assistant.app после второго набора команд? –

+0

@KenThomases Извините за поздний ответ, только сейчас я попытался изменить его, потому что есть причина, по которой мне нужен помощник, который будет известен как приложение ... поэтому я обновил вопрос с ответом на ваш вопрос. Я не знаю, где бы я установил ссылку «-headerpad_max_install_names», является ли опция qmake? – Thalia

+0

Если «- headerpad_max_install_names» является параметром qmake, то я не могу его использовать, так как я не создаю приложение Assistant, оно поставляется с Qt ... – Thalia

ответ

0

Неожиданно, помощник открывался корректно даже снаружи QT ​​Creator. Как только я дал оба ассистента nt и файл ресурсов абсолютный пути. (Я мог бы сделать это либо для исполняемого файла Assistant, либо для всего пакета)

Я скопировал исполняемый помощник в той же папке, что и исполняемый файл приложения.

Конечно, добавление зависимых библиотек и настройка путей ссылок на @executable_path /../ Frameworks требовались, например, для развертывания любого приложения. (Я просто сделал это вручную, а не с macdeployqt, потому что macdeployqt не удалось скопировать плагины)

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

Было бы здорово иметь помощника в своем собственном пакете (внутри ресурсов) ... но с зависимостями библиотеки Qt по-прежнему в ресурсах основного пакета, чтобы не копировать одни и те же библиотеки несколько раз. Я не мог этого сделать. Размещение каркасов Qt за пределами пакета не было возможным, так как я не могу полагаться на то, что пользователи не будут удалять элементы или устанавливать другие версии.

Смежные вопросы