Сборка .app на Mac с Python, Qt, PyQt, MySQL с использованием py2app?

Всем привет!


Есть проблема со сборкой приложения на Mac, написанного на Python+Qt+MySQL, бандл собирается через py2app


Частая проблема Qt — отсутствующий libqsqlmysql.dylib решена — скомпилировал и все заработало на девелоперской машине. Теперь задача — собрать автономный app.


Текущее состояние — app собирается и запускается на другой машине, но не может найти этот проклятый QMYSQL из бандла


Я нашел два потенциальных способа решения


1) использование в скрипте сборки macdeployqt — он создает папку xxxx.app/Contents/PlugIns с плагинами Qt но там нет плагинов из sqldrivers/*. Если я кладу их туда ручками — то соотвественно — на девелоперской машине бандл запустился отлично, на чистой машине — нет, ошибка «нет QMYSQL»


2) положить библиотеку плагина в Contenst/Frameworks/* как описано тут


но после выполнения

# install_name_tool -change /Developer/Applications/Qt/plugins/sqldrivers/ @executable_path/../Frameworks/libqsqlmysql.dylib ./dist/MyApp.app/Contents/MacOS/MyApp<br/>


и запуска приложения — этот плагин не подхватвается — даже на девелоперской машине


Что я делаю не так?


Заранее спасибо за любую помощь!

Мой оригинальный вопрос на StackOverflow
  • Вопрос задан
  • 3805 просмотров
Решения вопроса 1
@MikhailEdoshin
Во втором случае у вас новый install path длинее, чем старый — ничего не выйдет. Там тупо под более длинный путь места нет. Нужно перекомпилировать библиотеку и перелинковать то, что с нею линкуется. Или, проще, сделать путь короче — положить библиотеку рядом с executable, а не в Frameworks (это ведь не фреймворк все равно); тогда install path будет @executable_path/libqsqlmysql.dylib :)

(Есть, кстати специальная опция у линковщика -headerpad_max_install_names, специально для перебивания, как я понимаю, но вряд ли она была включена.)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Gorthauer87
@Gorthauer87
Программист
а libmysql.dylib кто в бандл класть будет, а?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы