2009-06-18 28 views
54

私は最近公開した単純なqtアプリケーションを公開(公開)しようとしていますが、静的リンクのqtライブラリに固執しています。Qt静的リンクとデプロ​​イメント

Qtと私のアプリケーションを静的に再構築するためにqt docsのガイドに従っています。しかし、リリースビルドには明らかな理由がないためにqtgui/qtcore dllが必要です。誰かがこの種の問題を以前に見たことがあるのだろうか?それとも正常に解決しましたか?あなたの.PROファイルにCONFIG + =静的を追加する必要が

http://doc.qtsoftware.com/4.5/deployment-windows.html

+1

はその後、これを解決するだろう '' 'CONFIG + = static'''を追加する?あなたはQtCore4.a、QtGui4.aの静的なコピーを持っています。 Qtの静的なコピーがない場合は、ソースを取得してビルドしてください。静的ライブラリを取得するには数時間かかります。 –

答えて

0

。 それでも問題が解決しない場合は、さらに情報を提供する必要があります。

+6

これは間違っています。そのような設定フラグは何もしません。 –

40

(それは特に単純なプログラムのために、かなり大きな得ることができますので)私はa guide to static linking

How to build Qt static with multiple compilers and keep it small

を書きました。 また、オープンソースプロジェクトでは無料のBitRockインストーラーをチェックアウトすることもできます。

要するに、ほとんどの画像タイプ(JPEG、GIF)やデータベースのサポートなど、Qtがプラグインと考えるものを使用していると少し複雑になります。 あなたのアイコン用のOracle DBMSおよびGIF画像のサポートを含めたい場合たとえば、あなたは.PROファイルに次の行を追加します。

QTPLUGIN += qsqloci qgif 
CONFIG += static 

あなたは、その後にする必要があります:

#include <QtPlugin> 

あなたのプロジェクトでは、使用されているプラ​​グインをインポートします。デバッグやフィーチャーの追加など、動的リンクを使用してコンパイルするには、これらの設定を変更する必要がありますが、これは簡単に自動化できます。また、静的リンクで使用するためのQtライブラリを構築する際には、Qt命令では少なくともあなたの作業を開始することができます。

+12

静的にリンクする場合は、ライセンスの問題に注意してください。 – Lisa

+5

リンクの壊れた... – Jared

+4

はまあ今、あなたの答えは...以下 – Veger

6

また、スタティックビルドは引き続きダイナミックビジュアルスタジオのランタイムにリンクすることに注意してください。

this faqinternet archive link, in case the link goes away)を参照してください:

なぜ静的に構築されたQtは動的なVisual Studioのランタイムライブラリを使用していますか?アプリケーションでそれらをデプロイする必要はありますか?

Qtは、動的C/C++ランタイムライブラリとリンクする-MD(d)スイッチを使用して構築されています。これは、-MD(d)フラグ以外のものを使用するときにメモリの問題が発生した場合に必要であり、一般的には使用することをお勧めします。フラグを-MTに変更した場合のQtライブラリの構築方法と矛盾するので、このフラグを自分のアプリケーションに変更するべきではありません。問題を引き起こす可能性があるので、Qtのためにも変更しないでください。

-staticオプションを使用すると、Qtは静的に構築されます。つまり、アプリケーションをデプロイするときにQt dllを配布する必要はありません。ただし、Cランタイムを配布する必要があります(ターゲットマシンにまだ存在していない場合)。展開のドキュメントhttp://doc.qt.io/qt-5/windows-deployment.html#application-dependenciesを参照してください。

12

Qt 5.5では非常に簡単です。Qtのを構築するときに、あなたがconfigureに渡す以下の直交設定があります。

  1. あなたは、静的なQtライブラリをしたいですか?

    -staticオプションはconfigure

  2. に渡す必要がありますが、Qtののビルドをしたいですし、あなたのアプリケーションの、静的なC++ランタイムを使用するには?

    ​​オプションはconfigure

  3. に渡すべきであるあなたはXPがターゲットにしたいですか?

    -target xpオプションはまた、this blog postからの指示に従ってくださいconfigure

    に渡す必要があります。

    のQt Creatorは、少なくとも、それが正しくビルドツールのための環境をセットアップしていないので、v.3.5.0まで自動的にターゲットとXPをサポートしていませんでした。ビルド環境は手動でper the blog postに変更する必要があります。

+0

'configure' == CONFIG? – user2962533

+2

@ user2962533いいえ、これはQt自体をビルドする前に実行する 'configure'スクリプトに関するものです。 –

1

私は、アプリケーションをコンパイルした静的(デバッグ)QTプラグイン(5.9)、VS(2015)との (勝利)と 。

a)はあなたのコードに追加します。

#include <QtPlugin> 
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin); 

b)は、リンクパス

\5.9.0_x86_static_install\lib 
\5.9.0_x86_static_install\bin 
\5.9.0_x86_static_install\plugins 
\5.9.0_x86_static_install\plugins\platforms 
\5.9.0_x86_static_install\plugins\imageformats 

C)あなたのリンクリストにQT静的ライブラリと内部VSライブラリのリストを追加するには、以下を追加します。

version.lib 
imm32.lib 
shlwapi.lib 
rpcrt4.lib 
Ws2_32.lib 
Mpr.lib 
Netapi32.lib 
Rpcrt4.lib 
Iphlpapi.lib 
winmm.lib 
gdi32.lib 
advapi32.lib 
msimg32.lib 
UxTheme.lib 
translatord.lib 
preprocessord.lib 
d3d9.lib 
dxguid.lib 
libEGLd.lib 
libGLESv2d.lib 
iphlpapi.lib 
psapi.lib 
ws2_32.lib 
Dwmapi.lib 
Qt5CoreD.lib 
Qt5Guid.lib 
Qt5Xmld.lib 
Qt5Widgetsd.lib 
Qt5Networkd.lib 
Qt5Winextrasd.lib 
Qt5PlatformCompositorSupportd.lib 
qicod.lib 
qtmaind.lib 
qtlibpngd.lib 
qtharfbuzzd.lib 
qtpcre2d.lib 
qwindowsd.lib 
Qt5FontDatabaseSupportd.lib 
Qt5ThemeSupportd.lib 
Qt5EventDispatcherSupportd.lib 
Qt5AccessibilitySupportd.lib 
qtfreetyped.lib 

ケビン・ヒギンズ

2

msys2は、事前に構築されたCMakeのを使用して、

static Qt5 packageを...、CMAKE_AUTOSTATICPLUGINSターゲットプロパティが設定されている場合、また、利用可能なすべてのプラグインをリンクしています。あなたはこのqmakeに使用する場合は、少なくともあなたはそれを自分で構築するための努力を惜しみ

(これは、現在、唯一の非公式、下流のパッチによって有効になっているが、それがゴールに到達しました)。

+0

私はこれを使いたいですが、CMAKE_AUTOSTATICPLUGINSを設定する方法がわかりません。私はqmakeを使ってmakeしています。アドバイスできますか? – tofutim

+0

ここにCMakeがあるので、そこに 'qmake'を間違えましたか? 'set(CMAKE_AUTOSTATICPLUGINS ON)'またはターゲット固有のプロパティとして 'set_target_properties($ {PROJECT_NAME} PROPERTIES AUTOSTATICPLUGINS ON)'をグローバルに設定するだけです。 – Darklighter

関連する問題