c - 使用 GCC 的另一个目录中的静态库和 header

标签 c gcc header-files include-path

我在找 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 ));
}

ma​​in.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 文件都位于主目录中。

ma​​in.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/

相关文章:

c - Cygwin/Windows 64 位上的堆栈大小是多少?

c - 我的 Lcov 命令无法写入目录?

c - 如何通过 popen 使用内置 shell 命令

python - 无法在 Ubuntu 中安装正则表达式

c++ - CUDA 和 C++ 函数问题 (Visual Studio 2013)

c - 在 IDE 中为 C 源文件自动生成头文件

c - 为什么 SPICE 包含 NULL 文件?

调用使用指针接收数组的函数

c - 如何在 linux 中为 c 程序编写 makefile

c - 使用 C Driver 获取两个日期之间的数据 mongoDb