どのようにi cにlibファイルをすることができます

M

Mahmed

Guest
私はどのようライブラリファイル内で機能¥させることを知ってください。実際にiにcで
、 ライブラリファイルで関数のdefinationように、ソ¥ースコードをしたいとヘッダファイルのプロトタイプ
例えば:
int合計()

戻り5 5;

pleaze私段階の手順を追って送信します。
私は関数sumのヘッダファイルsum.hとdefination()内sum.libでプロトタイピングする
どうすればこれらの両方のファイルを作成できます。感謝libファイルの私のソ¥ースを非表¥示にする

 
Linux上ではlibrayファイルの担当を使用して作成します。

 
こんにちはMahmed、各モジュールは1つまたは複数を含むライブラリモジュールのコレクションです機能¥および/または

、 データの定義。
ライブラリの粒度であるモジュールのため、リンカは

、 ライブラリから、完全なモジュールを抽出する場合でも



それは1つだけのシンボル内に定義される必要があります。
内部データとしてリンカの仕事をするためのライブラリファイルなどの方法で構¥成されて簡単に可能¥な限り(大規模な静的ライブラリの主要な痛みに使用されるリンク戻るときにディスク(はるか)は、本日よりも遅い)だった。
ライブラリには

、 特殊なツールとのそれは

、 司書を呼び出すように作成されます。その入力を1つまたは複数のオブジェクトは

、 コンパイラによって作成されたファイルです。
出力ライブラリモジュールとして

、 各オブジェクトファイルが含まれています。
司書ことができますまた

、 ライブラリの保守を実行する:、追加モジュールを置き換えるモジュールを削除するライブラリに新しいモジュールを、リストライブラリの内容を示します。
コンパイラは

、 通常のライブラリについては何も知りません。
すべてのはそれらについての指示を必要とする関数とデータが含まれています。これは通常

、 複数可)を添付ライブラリのヘッダファイル(達成されライブラリそのもの。
コンパイラは、*は任意の*ライブラリ、これはリンクしていないですリンカの仕事。
リンカは、デフォルトでは、とのライブラリに来るリンクされますコンパイラは、標準Cライブラリや任意の拡張機能¥を実装する実装を提供します(私は彼らには

、 システムライブラリ、のように参照してくださいよの残りの部分は

、 このチュートリアル)。
独自のライブラリをリンクするには、する必要があります明示的にシンボルの解決を検索するには

、 リンカ質問プロセスの名前を自分の名前を含めて、通常の後ライブラリから使用するもののオブジェクトファイル。
ここでは

、 デモの例は、どのようなUnixシステム上で動作するはずです。
コード自体はプラットフォームに依存しないコマンドのみを使用するUnixの固有のものです。あなた以外の同等のものを見つけるのUNIXシステムに有益なものがあります運動。
私たちのライブラリの2つのモジュールは、それぞれ1つの関数が含まれています。ライブラリのヘッダファイルは

、 これら2つの関数を宣言している:
ファンゴルンFangorn:〜/ tmpの74"猫demo.h#ifndefのDEMO_H_INCLUDED__DEMO_H_INCLUDED__定義#
無効demo_foo(無効);無効demo_bar(無効);
#Endifに
プリプロセスディレクティブは本当にこのような簡単のために必要されていません例では、その目的がされているのは

、 複数のインクルードを避けるためにヘッダーです。
より複雑なヘッダは、保護のこのような必要特に

、 もし彼らが自分自身のマクロを定義します。
ヘッダーで宣言された今、我々の機能¥を実装する必要があります:
ファンゴルンFangorn:〜/ tmpの78"猫demo_foo.c#含まれて<stdio.h>#"demo.h"を含む
無効demo_foo(無効)(配置("このアクションでdemo_foo")です。)ファンゴルンFangorn:〜/ tmpの79"猫demo_bar.c#含まれて<stdio.h>#"demo.h"を含む
無効demo_bar(無効)(置くアクション")demo_bar("これです。)


、 各ファイルには

、 ライブラリのヘッダが含まれます。
これが必要です実際の関数定義の関数と一致することを確認しますライブラリのヘッダで宣言。
これは

、 非常に機能¥を変更することは容易である定義をし

、 それに応じているので、ライブラリのヘッダを更新し忘れると、ライブラリのヘッダなどでは

、 コンパイラの仕事への私たちのデリゲートをチェックするには

、 ヘッダーと

、 関数内の関数の宣言同期がまだソ¥ースの定義ファイルです。
今、それは時間が我々のライブラリをビルドします。
まず、2つの関数をコンパイルオブジェクトコード:
ファンゴルンFangorn:〜/ tmpの80"杏- Ç demo_foo.cファンゴルンFangorn:〜/ tmpの81"杏- Ç demo_bar.c
この我々のファイルをdemo_foo.oとdemo_bar.oているの結果としては

、 することができます当社のデモライブラリをビルドするために使用される:
ファンゴルンFangorn:〜/ tmpの82"担当研究demo.a demo_foo.o demo_bar.o
今、我々は、それゆえ、Unixの用語では

、 ライブラリ(またはアーカイブdemo.aている司書(アーカイバ)とは

、 ライブラリの。サフィックスの名前を担当ファイル)。
我々はその内容を我々に使用される同じコマンドを使ってチェックすることができますで、ビルドが異なるもちろん、呼び出される:
ファンゴルンFangorn:〜/ tmpの85"担当トンdemo.ademo_foo.odemo_bar.o
しかし、これは何を

、 各モジュール内での教えはありません。
そのためには目的は、Unixの別のコマンドを提供し、名前を抽出ユーティリティ:
ファンゴルンFangorn:〜/ tmpの83"nmのdemo.a
demo_foo.o:00000000商品demo_fooŬ置く
demo_bar.o:00000000商品demo_barŬ置く
記号Tとのフラグは

、 モジュールによっては、シンボルフラグが定義されてUで使用されているモジュールが予¥想さどこかに定義されています。
そして今

、 我々は些細なプログラムでデモライブラリを使用することができますライブラリ自体:
ファンゴルンFangorn:〜/ tmpの89"猫demo.c#"demo.h"を含む
メインInt()は(demo_foo();demo_bar();戻り0;)
アプリケーションをビルドするには、2つの選択肢があります:
1。
コンパイル時に

、 メインプログラムを別々にして

、 結果のオブジェクトのリンク我々のライブラリ(および、暗黙的には、システムライブラリを使用):
ファンゴルンFangorn:〜/ tmpの90"杏- Ç demo.cファンゴルンFangorn:〜/ tmpの91"杏-図書館デモdemo.o demo.aファンゴルンFangorn:〜/ tmpの92"。/デモこのアクションでdemo_fooですこのアクションでdemo_barです
2。
ショートカットを持って全力を尽くす

、 単一のコマンドラインを使用。
これは



実際にいくつかの非Unixシステム上で可能¥性はありません。
ファンゴルンFangorn:〜/ tmpの93"杏-図書館デモdemo.c demo.aファンゴルンFangorn:〜/ tmpの94"。/デモこのアクションでdemo_fooですこのアクションでdemo_barです
ccコマンドを使用します。oとのファイルを認めている。オブジェクトとしての接尾辞と、それぞれ、ライブラリファイルとすべての操作を実行しようとしませんそれらは、リンカに渡すことを除いている。
リンカがすべてを置くオブジェクトを一緒にし

、 任意の存在しないシンボルを解決しようとするファイルモジュールのみを必要に含めることによって

、 ライブラリは

、 ユーザーが提供する、その目的のため。
もし1つのライブラリモジュールは、シンボルがすでに定義されて使用してライブラリを再度検索されます。
はまだいるすべてのシンボルについて定義は、システムライブラリが検索されます。
これらのしている私は

、 この記事では、静的ライブラリに取り組んでいるライブラリにすると、あなたの現在のレベルでの興味になりそうだ。
完全を期すため、(または)ライブラリ言及されるには、あまりにも必要な共有動的。いくつかのライブラリ関数は、特にこれらのシステムライブラリからのもので多くのプログラムで使用されます。
各プログラムの必要に自分のコードを含むそれらはかなり、実行可能¥ファイルのタイムリンクの面で無駄になるサイズと読み込み時間を。
また

、 ライブラリ中の問題である更新、セキュリティ修正プログラムのように適用されます。
プログラムを使用して静的で恩恵を受けるためのライブラリを再リンクする必要があるとなる新たなライブラリ。
この問題を解決するには共有ライブラリの使用方法です。
彼らのモジュールは

、 実行可能¥ファイルに含まれていない場合、リンカは単には

、 共有ライブラリモジュールをチェックすべてを解決するために必要なプログラムの未解決のシンボル。
ときに

、 プログラムは、ローダが実行されるどのモジュールをプログラムによって必要な共有のチェックが既にされていませんシステムメモリに読み込まれ

、 そこにロードではなく、一緒に比べプログラムの残りの部分です。
一度

、 システムメモリに読み込まれたすべての他のプログラムには

、 同じコピーを使用することが必要となり

、 両方のメモリを節約およびディスクスペース。
もう一つの利点は

、 再リンクするために必要ですライブラリのアップグレードをご活用ください。
残念なことに、すべての創造とのインストールに関連する共有ライブラリは非常にシステム固有の、しかし、ほとんど議論され方法については

、 ライブラリを書くことの場合にも適用されます。
多くのケースでは、同じライブラリの両方を共有し

、 静的な形式では、からビルドが存在する全く同じソ¥ースファイル。歓声...

 
使用Keil社。txtが感じるのcaopy関数です。"名前"でファイルを変更します。h拡張子を。変数&extrenとして関数を定義する

 
ほとんどのIDEのコンパイラでは
、 プロジェクトオプションのexeファイルにまたはlibをコンパイルする必要があります。

 

Welcome to EDABoard.com

Sponsor

Back
Top