我在这里看如何使用 GCC 做静态库,解释很清楚(尽管我不得不重写阶乘函数):我有一个函数(fact.c),函数的头文件(fact.h ) 和 main 函数 (main.c),它们都在我的主目录中。
事实.h
int fact (int);
事实.c
int
fact (int f) {
if ( f == 0 )
return 1;
else
return (f * fact ( f - 1 ));
}
主程序
#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) 中。在这种情况下,该程序的编译和/或代码将如何变化?
编辑/问题已解决:首先,main.c 已更正,以便在另一个名为 include 的目录中包含标题。请记住,在这种情况下,两个 .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