私はGCCを使用して静的ライブラリを実行する方法をここで見ていました. )、およびメイン関数 (main.c) であり、それらはすべてホーム ディレクトリにあります。
事実.h
int fact (int);
事実.c
int
fact (int f) {
if ( f == 0 )
return 1;
else
return (f * fact ( f - 1 ));
}
main.c
#include <stdio.h>
#include "fact.h"
int main(int argc, char *argv[])
{
printf("%d\n", fact(3));
return 0;
}
そのため、最初にオブジェクト ファイルを生成する必要がありました (フェーズ 1)...
$ gcc -c fact.c -o fact.o
...次に、静的ライブラリを生成します (フェーズ 2)...
$ ar rcs libfact.a fact.o
...後でスタティック ライブラリのリンク プロセスを実行します (フェーズ 3)...
$ gcc -static main.c -L. -lfact -o fact
...そして最後にプログラムを実行します (フェーズ 4 と最終)
$ ./fact
私の質問は次のとおりです。私のプログラムが非常に大きくなり、ヘッダーをヘッダー ディレクトリ (/include/fact.h) に置き、静的ライブラリも別のディレクトリ (/lib/libfact.a) に置く以外に選択肢がないとします。その場合、このプログラムのコンパイルおよび/またはコードはどのように変更されますか?
編集/解決済みの問題: まず、include と呼ばれる別のディレクトリにヘッダーを含めるために、main.c が修正されました。この場合、両方の .c ファイルがメイン ディレクトリにあることに注意してください。
main.c
#include <stdio.h>
#include "include/fact.h"
int main(int argc, char *argv[])
{
printf("%d\n", fact(3));
return 0;
}
次に、スタティック ライブラリを別のディレクトリに生成する (フェーズ 2) ため、次のようにしました。
$ ar rcs lib/libfact.a fact.o