輸入VS窓、動的および静的ライブラリ

1。静的および動的ライブラリ

1.1静的ライブラリ(.LIB)

機能とデータはバイナリファイル(通常は拡張子.LIB)にコンパイルされます。コンパイルされた実行可能ファイルを連結した場合、静的ライブラリの場合、リンカーの機能とデータは、ライブラリからコピーされ、最終的な実行可能ファイル(.exeファイル)を作成するために組み合わせる他のモジュールとアプリケーションにそれらを置きます。製品がリリースされている場合のみ、静的ライブラリを公開する必要はありません実行可能ファイルを解放する必要が使用されています。

1.2ダイナミックリンクライブラリ(.libファイルと.dllファイル)

:動的ライブラリを使用する場合、多くの場合、2つのファイルが提供インポートライブラリ(も「インポートライブラリ」として知られている)(.LIB)ファイルとDLL(.dllファイル)ファイルを。ライブラリの拡張の導入は、「LIB」ですが、しかし、動的ライブラリインポート・ライブラリ・ファイルと静的ライブラリファイルは、DLLファイルのために、そのインポートライブラリファイル(.libファイル)DLLの機能が含まれており、輸出し、基本的に異なっていますシンボリック変数の名前、およびDLL .dllファイルは、実際のデータと機能が含まれています。実行可能ファイルをコンパイルおよびリンクする際、共有ライブラリを使用する場合には、ライブラリファイルのみDLLの導入をリンクする必要があり、DLL関数のコードとデータは、実行可能ファイルにコピーすることができますのみ、実行が実行されるまでではありません必要なDLLをロードするために、DLLがプロセスのアドレス空間にマッピングされ、その後、エクスポートされたDLL関数にアクセスしています。、出版物の時には、この場合、実行可能ファイルを公開することに加えて、だけでなく、あなたは、プログラムが呼び出されますダイナミックリンクライブラリを公開する必要があります。

あなたは小さなDLL(ダイナミックリンク可能なライブラリ)ファイルにWindowsプラットフォームの独立したプログラム・モジュールを作成し、個別にコンパイルしてテストすることができます。実行時には、ケースEXEプログラムは、あなたが本当にこれらのDLLモジュールを呼び出したい場合にのみ、システムはメモリ空間にロードします。このアプローチは、メモリ容量の要件とEXEファイルのサイズを小さくするだけでなく、これらのDLLモジュールは、複数のアプリケーションを同時に使用するようにプログラムすることができます。Windowsは、DLLモジュールとして実装され、主要なシステム機能の一部を所有することになります。Windowsは、これらの関数呼び出しのアプリケーションはダイナミックリンクライブラリに含まれているために呼び出す機能の富を提供します。最も重要なDLLの3を含みます:

メモリ管理、プロセスおよびスレッドのための様々な機能が含まKERNEL32.DLL、。

USER32.DLL、(例えば、メッセージウィンドウを作成および送信)タスクを実行するためのユーザインタフェースを構成する各機能;及び

テキストを描画して表示するためのさまざまな機能が含まれていGDI32.DLL、。

Windowsの.EXEプログラムがメモリにロードされると、プログラムがDLL関数にエントリポイントを呼び出すDLLがメモリにない場合、システムがメモリにロードされますされています。Windowsプログラムへのリンクは、実行可能ファイルを生成するときに、あなたは特別な「インポートライブラリ(インポートライブラリ)」のプログラミング環境によって提供されたリンクしなければなりません。インポートライブラリは、すべてのWindows関数呼び出しのためのダイナミックリンクライブラリの名前と情報への参照が含まれています。リンカは、プログラムがロードされたとき、それはWindowsの機能を使用してWindowsを呼び出し.EXEファイル内のテーブルを構築するために、この情報を使用しています。

1.3は違いと静的ライブラリが導入されました

 はじめと静的ライブラリは、彼らの本質は同じものではありません、非常に異なっています。静的ライブラリ自体は、実際のコード実行、シンボルテーブル等が含ま実際の動的ライブラリのコード実行に位置しているライブラリの導入のために、つつインポートライブラリのみようにシンボル・テーブルのアドレスを含んでおり、基本機能プログラムは、対応を見つけるためにことを保証するために情報を扱います。しかし、導入および静的ライブラリのライブラリー方式の導入は、これらの.libを使用すると、リンクパスに追加するパスを見つけます。

2. VSは、libにファイルをリンク

VS内のlibファイルを追加する方法、2があります。

1)プラグマプログラム後のヘッダファイルで指定。

#pragmaコメント(libに、 "../ libに/ libmysql.lib")

2)VSは、ディレクトリとライブラリ名を指定しました。

インポートライブラリとヘッダファイルVS 2.1

VSは、libのライブラリとヘッダファイル(外部依存関係)のステップを追加しました:

1)プロジェクトのヘッダファイルのディレクトリを追加します。プロジェクトのプロパティ--- --- ---構成プロパティのC / C ++ ---一般---追加のディレクトリが含まれます:ヘッダファイルの格納ディレクトリを追加します。

2)ファイルを追加する静的ライブラリlibのパスを参照します。プロジェクトのプロパティ--- --- ---構成プロパティのリンカは--- ---追加の従来のライブラリカタログ:プラスのlibファイルの格納ディレクトリ。

そして、libのファイル名へのプロジェクト参照を追加します。プロジェクトのプロパティ--- --- ---構成プロパティのリンカ入力--- ---追加の依存:libのファイル名を追加します。

実行可能ファイルにディレクトリ参照DLLプロジェクト:3)ダイナミックライブラリDLLへのプロジェクト参照を追加します。

MTとMDの間に3 VSランタイム差

VSプロジェクトのプロパティ - >構成プロパティ→C / C ++→コード生成→ランタイムライブラリを使用することができます:、(/ MT)、マルチスレッド、マルチスレッドデバッグ(/ MTdに)、マルチスレッドDLL(/ MD)、マルチスレッドのデバッグDLL(/ MDD)。

/ MTは、リンカはLIBCMT.LIBは外部シンボルを扱う使用するように、それが定義された後、マルチスレッドの静的バージョンを意味し、「マルチスレッド、静的バージョン」で、コンパイラLIBCMT.LIBは、OBJファイルに移転しました。

/ MDは「multithread-およびDLL固有のバージョン」で 、 それが定義された後、マルチスレッドDLLのバージョンを意味し、コンパイラMSVCRT.LIBは、実際には、それはDLLが静的にリンクされている方法に接続され、OBJファイルに作業を移転しましたライブラリはMSVCR80.DLLです。

すなわち:

静的ランタイムライブラリ:LIBCMT.LIB

動的なランタイムライブラリ:MSVCRT.LIB + MSVCR80.DLL

「D」の小文字の最後にオプションとしてどのDEBUGバージョンリリースバージョンのための「d」を表していません。大規模プロジェクトは、そうでない場合があるだろう、すべてのコンポーネントおよびサードパーティのライブラリが統一されているランタイムライブラリを要求しなければならないLNK2005パンク。

シングルスレッドのランタイムライブラリオプション/ MLおよび/ MLdをVS2003が廃止された後。

 

参考:

1。C ++ libのライブラリとヘッダファイル内対追加(外部依存関係)

2。静的および動的ライブラリ、LIBファイルとDLLファイルの差分を設定します

3。ランタイムMT、差のMD VS

4。VC ++ランタイムライブラリの選択(/ MT、/ MTdに、/ MD、/ MDD) コンパイル時

おすすめ

転載: www.cnblogs.com/embedded-linux/p/11469900.html