LoginSignup
28
26

More than 5 years have passed since last update.

Qtを使ったアプリをMac用に配布する時

Last updated at Posted at 2013-12-16

アプリをビルドして .appをまるごとコピーしたはいいものの、別環境だと動かないというときの解決法

結論

アプリが依存しているQtのフレームワークをコピーしてきて、`install_name_tool` で参照先を書き換えて一緒にバンドルする

2013/12/17追記:macdeployqtというSDKに付属のコマンドを使うのがシンプルで良さそうです。教えて頂いた @shimacpyon さんありがとうございました。

手順

以下、macdeployqtを使わずマニュアルでする方法

1. otoolでアプリが使用している共有ライブラリを調べる

hoge.app/Contents/MacOS/ に移動して、アプリ本体のバイナリに対して以下

otool -L hoge

大体以下のようなQtライブラリが見つかる

/Applications/Qt/5.1.1/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.1.0, current version 5.1.1)
/Applications/Qt/5.1.1/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.1.0, current version 5.1.1)

他の環境にコピーしたとき、上記パスにQtがない場合は動かないので、フレームワークをバンドルしてパスを書き換える必要がある

2. install_name_toolでフレームワークの参照先を変更

例えば、hoge.app/Contents/Frameworksというディレクトリを作って、上記のフレームワークをコピーする。そして、バイナリファイルに対して以下のコマンド

install_name_tool -change "/Applications/Qt/5.1.1/clang_64/lib/QtGui.framework/Versions/5/QtGui" "@executable_path/../Frameworks/QtGui" hoge

install_name_tool -change "/Applications/Qt/5.1.1/clang_64/lib/QtCore.framework/Versions/5/QtCore" "@executable_path/../Frameworks/QtCore" hoge

@executable_pathというのは、バイナリファイルのパスのこと。これで.app内にコピーしたライブラリを参照してくれるので、別の環境にコピーしても動く。

3. アプリ配布

.appフォルダ毎コピればおk。

いじょう、簡単だけどめんどくさいです。

書いてから思ったけど、QtにかぎらずMacで共有ライブラリを使ったアプリを配布する際の話でした

windowsの場合

QtCore.dll、QtGui.dllとかライブラリをexeと一緒のフォルダに入れておけばOK

28
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
26