我正在寻找here如何使用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
答案 0 :(得分:3)
这是你的答案,
$ gcc -static main.c -L。 -lfact -o fact
-L将目录添加到要搜索的目录列表-l
它在你给的链接中。如果你正确地设置了搜索方向和低搜索范围,那就不会有问题了。否则它不会编译代码。因为代码不知道标题在哪里。
答案 1 :(得分:2)
您可以添加-I以指定包含路径。
gcc -I/include fact.c
gcc -I/include -static main.c -L/lib -lfact -o fact_main