0

プログラムで使用したい便利なユーティリティ関数を C でいくつか作成しました。それらはすべて ../lib フォルダーにあります。`#include "../lib/library.h" でインクルードする関数プロトタイプを含むヘッダー ファイルがあります。ただし、gcc でコンパイルするときは、関数定義を含む C ファイルの名前も指定する必要があります。

現在、../lib フォルダーには 3 つの C ファイルしかありませんが、これは時間の経過とともに大きくなる可能性があります。プログラムをコンパイルするときに、これらのファイル (main.c ファイルを含む) をすべて含めるように gcc に自動的に指示する方法はありますか?

4

1 に答える 1

1

ライブラリを作成します。Linux を使用している場合は、静的ライブラリと共有ライブラリのどちらが必要かを選択する必要があります。静的ライブラリは、Linux でアーカイバ コマンドを使用して作成されます。「ar」のグーグル。

ar cr libtest.a test1.o test2.o

これで、gcc または g++ で -ltest オプション (ltest は、作成した libtest の省略形) を使用して、このアーカイブにリンクできます。コードに C コードしかない場合は、gcc を使用してください。C と C++ の両方がある場合は、g++ を使用します。

ヘッダー ファイルと同様に、リンカーは、標準のシステム ライブラリを含む /lib および /usr/lib ディレクトリなど、いくつかの標準的な場所でライブラリを検索します。リンカーに他のディレクトリも検索させたい場合は、-L オプションを使用する必要があります。これは、ヘッダー ファイルの -I オプションと同様です。この行を使用して、リンカーに /usr 内のライブラリを探すように指示できます。通常の場所を見る前に /local/lib/MyTest ディレクトリ:

g++ -o reciprocal main.o reciprocal.o -L/usr/local/lib/MyTest -ltest

-I オプションを使用してプリプロセッサに現在のディレクトリを検索させる (ヘッダー ファイルを検索するため) 必要はありませんが、リンカに現在のディレクトリを検索させるために -L オプションを使用する必要があります。特に、次を使用して、リンカに現在のディレクトリでテスト ライブラリを見つけるように指示できます。

gcc -o app app.o -L. -ltest

共有ライブラリの作成プロセスも同様です。コツをつかめば、メイクファイルを介してコンパイルとリンクを処理できます。

(この記事の一部は Advanced Linux Programming から引用しました。リンク: http://www.cse.hcmut.edu.vn/~hungnq/courses/nap/alp.pdf )

于 2013-10-08T23:34:21.837 に答える