2011-07-10 11 views
1

私はLinuxとWindowsでしばらくQtを使用しています。しかし、昨日私は新しいMacBook Proを手に入れました。当然、私はMacで自分のQtアプリケーションを構築できるかどうか確認しています。OS XでQtアプリケーションをデプロイしたときに作成された非常に大きな.appバンドル

私はほとんどすべての作業を行っていますが、結果のアプリケーションバンドルのファイルサイズに問題があります。

私はこのように自分のアプリケーションを構築していますが:

qmake -spec macx-g++ 
make 
macdeployqt my.app -no-plugins -dmg 

バンドルとすべてが正常に動作するように見える、しかし、生成された.APPは31.1メガバイト大きく、.dmgファイル13.6 MBです!

これは正常ですか?この恐ろしいサイズを減らすことはできますか(Windowsでは、すべてのライブラリを持つ同じアプリのインストーラは約4MBです)。

答えて

2

事前ビルドされたQtライブラリを使用している場合、複数のアーキテクチャを持つ汎用バイナリである可能性があります。たとえば、$ file my.app/Resources/Frameworks/QtCore.framework/Versions/4/QtCoreを実行すると、複数のアーキテクチャが表示されます。

サポートしたいアーキテクチャのみで独自のQtライブラリを構築できます。 PPCは古くからサポートされていません。現在のQtを使用している場合は、32ビットと64ビットのどちらかの決定を下すことができますが、それは別の質問です。

0

Qtダイナミックライブラリのサイズは、バンドルの一部でなければならないため、問題があります。

これらのサイズは通常小さくすることができます。 これを行う方法については、How do I make apps smaller with qmake and macdeployqtのソリューションを参照してください。

優れた回避策は、Qtの静的ビルドと静的ビルドに対するアプリケーションのリンクです。これは通常、Qtを動的にインストールする2つのアプリケーションが通常Mac OSでクラッシュするので、非常に良いアイデアです。 あなたのアプリケーションは、静的なビルド(私の経験から)約あるでしょう。 10〜20MBのサイズ。上記の手順と組み合わせて、さらにいくつかの削減が可能かもしれません。

+0

ダイナミックライブラリを使用している2つのアプリは、Windowsでクラッシュする可能性が高いですね。しかし、最近更新されたため、あるアプリが同じライブラリの別のバージョンを必要とするのは同じリスクです。 Windowsの場合と同様に、これらの状況を管理したい場合は、セントラルダイナミックライブラリをインストールすることができます。 – koan

+0

しかし、Mac OSは両方のQtの静的変数が重複しているので、Qtがクラッシュするような動的ライブラリもあります。アプリケーションは(ランダムに選択された)ロードされたライブラリのバージョンを使用します。短時間。 Windowsは1つのバージョンのみを読み込みます。これはいつも大丈夫です。 Qtは主にWindows用に設計されたもので、後で他のOSが追加され、時には奇妙な動作をすることもありました。 – Jens

+0

@Jens:「Qtを動的にインストールする2つのアプリケーション」とはどういう意味ですか? .appバンドル内のライブラリは通常ありませんか?各アプリケーションが.appフォルダに独自のコピーを持っているため、2つのアプリケーションのQtバージョンがどのように干渉することがありますか? – houbysoft

関連する問題