web-dev-qa-db-ja.com

QtとQtcreatorでライブラリを動的ではなく静的にリンクさせる方法は?

他の多くの質問と似た質問かもしれませんが、何度も検索して決定的かつ効果的な解決策を見つけられなかった後、この質問をしなければなりません。

Qt 5.2.0 for Windows 32-bit(VS 2010、570 MB)を使用していますが、すでにプログラミングを行っており、すべて完了です。しかし、今では同僚に.exeファイルとして配布したいのですが、面倒なことなく配布し、dllファイルを配布する必要がないようにするには、静的リンクを使用してプログラムをビルドする必要があります。

Qt 5.2.0 for Windows 32-bit(VS 2010、570 MB)静的リンクを使用してプログラム全体をビルドする方法を教えてください。

ありがとう。

18
the_naive

QmakeでこれにCONFIG変数を使用できます。

CONFIG += static

または

CONFIG += staticlib

ただし、バンドルしたいすべてのライブラリを静的として利用できるようにする必要があります。

ライセンスに準拠している場合、これにはQtフレームワーク自体も含まれます。公式インストールでは動的ライブラリ(.dllファイル)のみが設定されるため、これを実現するには独自にQtをビルドする必要があります。

次のコマンドを使用して、独自の目的でQtを静的に構築できます。

configure -developer-build -opensource -nomake examples -nomake tests -static
qmake -r
nmake

一般的に、サードパーティのQtソフトウェアを構築する場合、次のパラメーターを使用してqmakeを呼び出して環境を適切に渡すことをお勧めします。

qmake -r -spec win32-msvc2010 

FrankとManuelHがコメントで書いたように、アプリケーションがLGPLのフリーライセンスまたは少なくともLGPLとの互換性がない場合、またはQtの商用ライセンスを使用していない場合、静的リンクは許可されません。アプローチを開始する前に、これについて確認することをお勧めします。

それが完了したら、次のように、通常の方法でLIBS変数を使用できます。静的ライブラリのパスをライブラリ名とともに渡すには、次のようにします。

LIBS += -L/path/to/the/static/library -lstaticlibraryname

-lパラメーターに渡される静的ライブラリー名には、静的ライブラリー拡張(例えば、Windowsの場合は.lib)を含めないでください。

フォールバックとして、他のライブラリを常に静的にリンクし、Qt dllファイルを実行可能ファイルの横に配置し、フォルダーを「パッケージ」としてデプロイできます。それはおそらくあなたが行くためのより簡単な方法です。

22
lpapp