VC2005コンパイラの「本当の」静的なQtアプリケーション(rpm)を使用する方法

VC2005コンパイラの「本当の」静的なQtアプリケーション(rpm)を使用する方法
2009年10月10日10時30分

オリジナルのポスト所在地:http://www.qtcn.org/bbs/read.php?tid=13825

VC2005コンパイラの「本当の」静的なQtアプリケーションを使用する方法

(私は引用する嫌いかの重版他の誰かの記事は、アドレスや、著者は、私は読者が:)このビューを変更することができることを願っていたときに指定されていません-ハワイ雪だるま)

ここでは、さらに(以下、ウィンドウのみを含み、およびその他のLinux、UNIX、話VC2005は、私は同じVCことも参照)の2005年、実際には、他のバージョンを使用しているため、と

最初にすべての、あなたは静的参照コンパイラは、ダイナミックリファレンスコンパイラ何が何であるかを知っている必要があります。私はここだけであなたはそれをグーグルことができ、特定に言及。

ダイナミックリファレンスコンパイラは、関連するライブラリ、DLLの形で参照ライブラリを指します。関連のライブラリが含まれていないので、exeファイルを動的コンパイルされたプログラムのサイズは、比較的小さいです。もちろん、ときに、プログラムのリリースが、また、関連ライブラリが一緒に宣伝しました。

コンパイル静的参照は、また、EXEファイルと一緒に導入された関連したライブラリーを指します。これは、プログラムのサイズが膨大になりますです、しかし、リリースプログラムがはるかに容易になります。

第二に、私はタイトルを「リアル」という言葉を書いて気づいているかもしれません。なぜ私は本当に言葉にそれを強調したいですか?VCの使用は、CまたはC ++プログラムをコンパイルしているので、彼らは実行にCランタイムライブラリのニーズに関連しています。あなたはVC6であれば、対応するライブラリがMSVCRと呼ばれ、それはMSVCR08でVC2005であれば、VC2008はMSVCR09です。$ {VSは、ディレクトリをインストール} /:私は、次のディレクトリに移動してくださいあなたはVC2005をインストールしていることを前提と VC /再頒布可能/ x86のと$ {システムドライバ}:/ウィンドウ / WinSxS、 あなたがここに見つけるだろう多くの、多くのライブラリがあります。はい、Cランタイムライブラリのかなりの部分があります。

さて、上の取得、最初にすべての、我々はプログラムVC2005を書いて、それはエンドユーザーに配布方法を、CまたはC ++のMFC預金を使用していませんか?2つの方法があります。
(1)静的参照Cランタイムライブラリ:オープン"プロジェクト" - > "XXXのプロパティ" - > "構成プロパティ" - > "C / C ++ " - > " コード生成" - > "ランタイムライブラリ。" それを参照してください?、MTの静的参照の始まりである、ここで4つのオプションは、ダイナミックMDの冒頭で引用されている、dはデバッグデバッグバージョンの終わりであり、4つのオプションの合計ので、何のDリリースのリリースバージョンではありません。私たちは、選択/ MT、コンパイラ(生成されたプログラムは小さくすべきではない)、ユーザーにこのプログラム、およびユーザが直接実行することができます。
ほぼ上記のような、しかし/ MDコンパイラオプション(プログラムすべき唯一の数十K)と、次いでユーザに配布し、(2)ダイナミックリファレンスCランタイムライブラリ。この時点で、ユーザーは、このプログラムを実行することはできません、とプログラムが起動に失敗したものを報告し、システムを再インストール問題を解決するよう促しました。これは、私たちが過去に同時Cランタイムライブラリを入れて持っているものです。すべてのファイル$、ユーザーはと私たちのプログラムにこれらのファイルを置くユーザーに(マニフェストファイルを含むすべて、そのノート)の下で/VC/redist/x86/Microsoft.VC80.CRT {VSは、ディレクトリをインストールします}ディレクトリが、その後、再びこの時間を実行して、プログラムが(参照Cランタイムライブラリは、多くのことを変更されているVC2005後、勧告はそれをグーグル)までです。

Cランタイムライブラリを持つ、Qtライブラリと懸念されており、ここで私はあなたが最新のQt4.4.3を使用していると仮定。私たちはQtのをコンパイルすると、多くのパラメータがあり、我々は設定できconfigure.exe。、コンパイラの後、QTDIRのlibディレクトリにあること、(-shareまたは-staticパラメーターを追加されていないこと、ここで意味デフォルト)が動的に参照されているデフォルトのQtライブラリによって生成され、参照すること--help exeファイルたくさんのlib下のファイルに加えて、DLLファイルがたくさんあります。DllファイルQtライブラリを適切にする必要が一緒になってユーザに配布するとき私たちは、exeファイルのプログラムを公開します。

-staticパラメータで、Qtのは、静的libディレクトリに、無dllファイルの後に、と言うことですつまり、LIBファイルの多くをコンパイルすることができ、オンラインインストールマニュアルに従い、Qtのダニエル書の多くと。ていますか?私たちは、テストを実行します。

最初のセット変数にある:
SET QTDIR =%のCD%の
SET PATH =%PATH%で、%QTDIR%/ binに
SET QMAKESPECのWin32-msvc2005 =
"C:/プログラムファイル/マイクロソフトのVisual Studio 8 / VC / vcvarsall.batで"「x86の
設定Makefileの:
のconfigure -static -release -fast -qt-SQL-ODBC SQL-のSQLite - QT -no-WebKitの
特に明記し(ここではそれらを設定していないのパラメータは、読者が真剣に助言される--helpに見て、何を、なぜ-no-webkitの、QTの新バージョンは、Webkitのを追加したので、このようなものは非常に時間のかかるコンパイル時間で、コンパイラも素晴らしいですが、そこに100以上のMがあり、私は基本的にこの東は使用しないでください東、それを無視して)
、その後
、CDのSRC(他の無関係のモジュールを作りたくないので、私は時間を節約し、SRCディレクトリNMAKEに直接行く理由)
NMAKE

長い待ち時間の後、私たちはlibの下に本当に唯一のlibファイルの多くを発見し、各ファイルのlibと大きさがよりMよりも、成功しているように思われています。その後、我々は新しいVC2005 QtのプロジェクトのQT-vsintegrationをインストールした後、リリースバージョンをコンパイルします。コンパイル時、問題が来ました。私たちは、/ MDオプションを選択し、あなたができるリンクが、私たちは、静的のCランタイムライブラリを使用するために/ MTオプションを使用する場合、それは多くのミスは、特定の機能の繰り返し報告したクラスをリンクします。経験が別のライブラリ--Qtライブラリは原則として別の参照/ MD(、すべてのモジュールが同じリファレンスを使用する必要があるプログラムを使用しているため、彼は、コンパイルするために、/ MTのを使用することができなかったことを教えてくれる具体的にそれをグーグル)。もちろん、我々はどこにでもマイクロソフトCランタイムライブラリを運ぶのように、いわゆる静的Qtのプログラムをコンパイルして、それが十分に「本物」静的ではありません。


どのようにそれは完全に静的で作ることができますか?そのオプションSHARED = 0または1に加えて、RUNTIME_LIBS =静的または動的なオプションがある場合、wxWidgetsのは覚えてコンパイルする前に、このRUNTIME_LIBSオプションは、我々はオプションを望むものであることは明らかです。しかし、私は手動でインストールをrummagedおよびオンライン記事Qtのダニエルは、このことを言及していない、私は心だった奇妙なと感じ、誰もこの問題が発生していないということですか?私は慎重に質問フリーズをクリックして、全く同様のオプションが存在しない、ヘルプconfigure.exeを見上げました。

リコール私たちはコンパイル時間を有するように引数がある場合、コンパイラの呼び出しは、画面上のCL.EXE:cl.exeの.... -MD .... xxx.cpp、リーアイの友人あなたが見つけるなるか、これをオプションのCランタイムが動的に参照することを-MD。しかし、どのようにこの-MD -MTそこに?私達はちょうど私たちはQTをコンパイルしたsrcディレクトリの下に開かれた、とだけディレクトリを見つけることに行く、オープンMakefile.Release、我々はここにあるCFLAGS = -MD ........、はいを、表示されますしています。我々は-MTにここに-MDにしている限り、あなたはQtのコンパイル静的Cランタイムライブラリを使用します。我々は確かに1つのmakefileすることにより、これらのものを置き換えることはできません、キーはテンプレートファイルを生成するために、これらのパラメータを識別することです。もちろん、それは我々は、Win32-msvc2005ディレクトリにまっすぐに行った、QT mkspecsディレクトリに確かに、彼女は彼女がQMAKE_CFLAGS_RELEASE = -O2 -MD、-MDは-MTを交換し、ここだし、クリーンアップを見つけ、qmake.confファイルを見つけましたちょうど生成された構成情報は(オンラインNMAKE confcleanをクリアすると言ったが、私は一見-fast引数の酒を使用して、成功しなかったが、それは大丈夫だ、このディレクトリが削除され、再抽出し、その上にソースコードを、その後、qmake.conf -MDが-MTを置き換えのWin32-msvc2005ディレクトリの下)、再
構成し-release -static -fast -qt-SQLベースのODBC -qt-SQL-sqliteの-no-のWebKit
その後、NMAKE
別の長期待ちます。しかし、我々は、コンパイルコマンドの実行を参照するには、CL.EXE .... -MT .... xxx.cppでそうしていない、それは本当に静的のCランタイムになります。
私はVC2005ビルドQtのプロジェクトでは、ちょうど持って、その後、コンパイルに/ MTにこのオプションを使用するとexeファイルのサイズのうち、4.95Mでコンパイルした後、[OK]を、正常にコンパイル、来るCランタイムライブラリ自体に埋め込まれているようです。そして、成功を実行するために、OK単一のEXEファイルを実行するユーザーにこのプログラムを置きます。

この時点で、本当の静的テストプログラムのQtの完了をコンパイルします。Qtは(もちろん、このようないくつかの-fast、-no-qmakeのようなスキル、そしてこれだけコンパイルのsrc技術と多くの時間を短縮することができます)は、少なくとも2つの時間後にコンパイルされているので、全体のプロセスを要約すると、まず、患者になることです、I前後に5回のQtをコンパイルするために、いくつかの共通のコンパイラと第二に馴染み、このようなエラーを参照するには、ライブラリとしてリンク切れは、すでにXXXを同様に引用し、すぐに別のライブラリが引き起こされ、参照されるべきだと思う。良いため、最後にと、質問、問題を見つけます。

公開された15元の記事 ウォンの賞賛2 ビュー50000 +

おすすめ

転載: blog.csdn.net/imhikaru/article/details/5983853