【发布时间】:2013-04-09 15:36:47
【问题描述】:
我在看herehow to do static libraries using GCC,解释很清楚(鄙视我不得不重写阶乘函数):我有一个函数(fact.c),函数(fact.h)和主函数(main.c),它们都在我的主目录中。
fact.h
int fact (int);
fact.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) 中。在这种情况下,该程序的编译和/或代码将如何变化?
编辑/问题解决:首先,修正了 main.c,以便在另一个名为 include 的目录中包含一个头文件。请记住,在这种情况下,两个 .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
【问题讨论】:
标签: c gcc header-files include-path