2010-11-30 22 views
1

Qtアプリケーションをコンパイルして実行することに成功しました。しかし、元のパスの外に.exeファイルを移動すると、Qt DLL(mingw10.dll、qtcore4.dllなど)を手動でコピーする必要があることがわかりました。アプリケーションとこれらのライブラリをリンクする動的な方法はありますか?Windows用Qtアプリケーションのコンパイル済み配布

答えて

4

私は、これらのライブラリをアプリケーションに「静的に」リンクしたいと思っています。 これは基本的には、すべてがあなたのexeの中でロールバックされることを意味し、それらのdllはもう必要ありません。

静的リンクには利点がありますが、欠点もあります。あなたはこれがあなたがこのように行く前にやりたいことが絶対に確実であるはずです。

あなたは、あなたが静的に構築されるためにあなたのQtの設定を変更する必要があります静的リンクを使用したい確信している場合は、あなたの特定の問題については深さの差Dynamic Linking vs Static Linking

を説明し、このリンクをチェックしてください。デフォルトでは、動的リンクを使用するようにQt配布が設定されています。そのhereの便利なガイドがあります。

基本的にビルドをセットアップするときは、動的リンクの代わりに静的リンクを使用するようにすべてのプロジェクト設定を変更するには "configure -static"を実行する必要があります。そしてQtをもう一度構築してください。

Qtライセンスも確認する必要があります。 Qt LGPLライセンスを使用していて静的にリンクしたいのであれば、MihaiLimbăşanが彼のコメントで賢明に説明したように、すべてのオブジェクトファイル(.oと.obj)を含める必要があります。あなたが購入してQtを支払った場合、問題はありません。

+0

静的リンクはLGPLに違反しませんが、アプリケーションの.o/.objファイルを提供して、エンドユーザーがオブジェクトファイルを別の(互換性のある)Qtバージョンにリンクすることで作業可能な実行ファイルを再構築できるようにする必要があります。詳細については、ここをクリックしてください:http://stackoverflow.com/questions/2945612/2946131#2946131 –

+0

私はこれが論争の的な問題だと言いました。 :) – Liz

+0

あまり論じられていません:) LGPLはこの問題についてはっきりしています。ライセンスを読むのが好きな人は誰もいません。 –

2

DLLがアプリケーションのPATHにある場合は、それらが検出されて動作します。だから、あなたのQtバイナリ/ dllが%PATH%環境変数にどこにあるのかを追加することができます。アプリケーションのインストーラを作成する場合は、binディレクトリにあるようにこれらのライブラリをパッケージ化する必要があります。そうしないと、すべてのユーザがQtをインストールしてコンパイルする可能性があります(ヒント:最初のオプションと一緒に行ってください:)

関連する問題