我在找 here how 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
最佳答案
这是你的答案,
$ gcc -static main.c -L。 -lfact -o 事实
-L 将目录添加到要搜索的目录列表中-l
它在您提供的链接中。如果您正确设置搜索方向和低搜索范围,这将不是问题。否则它不会编译代码。因为代码不知道 header 在哪里。
关于c - 使用 GCC 的另一个目录中的静态库和 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906286/