Qt アプリを Mac OS X 用にパッケージ化する際に問題が発生しています。
Mac OS X でのアプリケーションの展開に関するドキュメントを読みましたが、何が間違っているのかまだわかりません。
私の Mac では、Qt5 が ~/Qt5.1.0/5.1.0/clang_64 にインストールされています (これは bin/ および lib/ フォルダーが存在する場所です)
~/Documents/QtProjects/renamer/ に「renamer」という Qt アプリケーションがあります。
Qt Creator を使用して、~/Documents/QtProjects/build-renamer-Desktop_Qt_5_1_0_clang_64bit-Release でアプリケーションのリリース バージョンをビルドしました。だから私が最初にしたことはotool
、私のアプリケーションで実行することでした:
$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt_5_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)
次にしたことは、renamer.app バンドル内に Frameworks ディレクトリを作成し、QtWidgets、QtGui、および QtCore フレームワークを新しいディレクトリにコピーすることでした。
$ cd ~/Documents/QtProjects/build-renamer-Desktop_Qt_5_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)
実行すると出力が新しい Qt パスに変わると思いotool -L renamer.app/Contents/MacOS/renamer
ましたが、それでも同じです。すべての手順に従ったと思っていましたが、うまくいきません。手順を間違えましたか、それとも何か間違ったことをしましたか? Windows では問題なくプログラムを展開できますが、Mac では問題が発生します。otool を実行すると、 renamer.app バンドル内から QtCore、QtGui、および QtWidgets フレームワークを見つけるための新しく設定されたパスが表示されるようにするにはどうすればよいですか?
アプリのデプロイにも使用しようとしましmacdeployqt
たが、~/Qt5.1.0/5.1.0/clang_64 にインストールされている Qt ライブラリの名前を変更/削除すると、アプリが機能しません。sudo macdeployqt renamer.app
/bin を PATH に追加した後、プロジェクト フォルダーでコマンドを試しました。正常に実行されますが、Qtのmacdeployqt
名前を変更/削除すると、アプリケーションが実行されなくなります。otool
を実行した後にも実行しましmacdeployqt
たが、出力は変更されていません。必要な Qt ライブラリをアプリ バンドルにコピーすると思いますmacdeployqt
が、qt ライブラリを探す場所が正しく変更されません。