У меня проблемы с упаковкой приложения Qt для Mac OS X.
Я прочитал документацию по Развертыванию приложения в Mac OS X но я все еще не уверен, что делаю не так.
На моем Mac у меня установлен Qt5 на ~ / Qt5.1.0 / 5.1.0 / clang_64 (здесь находятся папки bin / и lib /)
У меня есть приложение Qt под названием "renamer" в ~ / Documents / QtProjects / renamer /.
Используя Qt Creator, я создал окончательную версию своего приложения в ~ / Documents / QtProjects / build-renamer-Desktop_Qt_5otool
0_clang_64bit-Release. Итак, первое, что я сделал, это запустил otool
в своем приложении:
$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt_5_1_0_clang_64bit-Release
$ install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore "renamer.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore"
$ install_name_tool -id @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui "renamer.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui"
$ install_name_tool -id @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets "renamer.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets"
1_0_clang_64bit-Release
$ otool -L renamer.app/Contents/MacOS/renamer
Вот результат:
renamer.app/Contents/MacOS/renamer:
/Users/paul/Qt5.1.0//5.1.0/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.1.0, current version 5.1.0)
/Users/paul/Qt5.1.0//5.1.0/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.1.0, current version 5.1.0)
/Users/paul/Qt5.1.0//5.1.0/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.1.0, current version 5.1.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
Следующее, что я сделал, - это создал каталог Frameworks внутри моего пакета renamer.app и скопировал фреймворки QtWidgets, QtGui и QtCore в новый каталог:
$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt_5_1_0_clang_64bit-Release
$ install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore "renamer.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore"
$ install_name_tool -id @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui "renamer.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui"
$ install_name_tool -id @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets "renamer.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets"
1_0_clang_64bit-Release
$ mkdir renamer.app/Contents/Frameworks
$ cp -R ~/Qt5.1.0/5.1.0/clang_64/lib/QtCore.framework renamer.app/Contents/Frameworks
$ cp -R ~/Qt5.1.0/5.1.0/clang_64/lib/QtGui.framework renamer.app/Contents/Frameworks
$ cp -R ~/Qt5.1.0/5.1.0/clang_64/lib/QtWidgets.framework renamer.app/Contents/Frameworks
Затем я запустил install_name_tool, чтобы установить идентификационные имена для фреймворков QtWidgets, QtGui и QtCore:
$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt_5_1_0_clang_64bit-Release
$ install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore "renamer.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore"
$ install_name_tool -id @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui "renamer.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui"
$ install_name_tool -id @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets "renamer.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets"
Затем я убедился, что приложение знает, где найти библиотеку:
$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt_5_1_0_clang_64bit-Release
$ install_name_tool -change /../Frameworks/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore "renamer.app/Contents/MacOS/renamer"
$ install_name_tool -change /../Frameworks/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui "renamer.app/Contents/MacOS/renamer"
$ install_name_tool -change /../Frameworks/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets "renamer.app/Contents/MacOS/renamer"
Наконец, поскольку структура QtGui зависит от QtCore, а структура QtWidgets зависит от QtGui / QtCore, я также изменил ссылку для QtGui и QtWidgets:
$ install_name_tool -change /../Frameworks/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore "renamer.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui"
$ install_name_tool -change /../Frameworks/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui "renamer.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets"
$ install_name_tool -change /../Frameworks/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore "renamer.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets"
Однако, когда я снова запускаю otool -L renamer.app/Contents/MacOS/renamer
, ничего не меняется, и я получаю тот же результат, что и раньше:
renamer.app/Contents/MacOS/renamer:
/Users/paul/Qt5.1.0//5.1.0/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.1.0, current version 5.1.0)
/Users/paul/Qt5.1.0//5.1.0/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.1.0, current version 5.1.0)
/Users/paul/Qt5.1.0//5.1.0/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.1.0, current version 5.1.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
Я думал, что запуск otool -L renamer.app/Contents/MacOS/renamer
изменит вывод на новые пути Qt, но он все тот же. Я думал, что выполнил все шаги, но это не работает. Я пропустил шаг или сделал что-то не так? Я могу успешно развернуть свою программу в Windows без проблем, но у меня проблемы с Mac. Как я могу сделать так, чтобы при запуске otool отображался только что установленный путь для поиска фреймворка QtCore, QtGui и QtWidgets из моего пакета renamer.app?
Я также пытался использовать macdeployqt
для развертывания моего приложения, но мое приложение не работает, когда я переименовываю / удаляю библиотеку Qt, установленную в ~ / Qt5.1.0 / 5.1.0 / clang_64. Я попробовал команды sudo macdeployqt renamer.app
в папке моего проекта после добавления / bin в мой PATH. macdeployqt
работает нормально, но когда я переименовываю / удаляю Qt, мое приложение больше не запускается. Я также запустил otool
после запуска macdeployqt
, но результат не изменился. Я думаю, macdeployqt
копирует необходимые библиотеки Qt в пакет приложений, но неправильно меняет, где искать библиотеки qt.
macdeployqt
для успешного развертывания моего приложения. Теперь, когда я переименовываю / удаляю Qt, мое приложение по-прежнему работает без проблем. - person kimbaudi   schedule 29.08.2013