使用GCC的其他目录中的静态库和头

使用GCC的其他目录中的静态库和头,c,gcc,header-files,include-path,C,Gcc,Header Files,Include Path,我正在研究如何使用GCC实现静态库,解释非常清楚(尽管我不得不重写阶乘函数):我有一个函数(fact.c)、函数的头(fact.h)和主函数(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"

我正在研究如何使用GCC实现静态库,解释非常清楚(尽管我不得不重写阶乘函数):我有一个函数(fact.c)、函数的头(fact.h)和主函数(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;
}
#include <stdio.h>
#include "include/fact.h"
int main(int argc, char *argv[])
{
        printf("%d\n", fact(3));
        return 0;
} 
main.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;
}
#include <stdio.h>
#include "include/fact.h"
int main(int argc, char *argv[])
{
        printf("%d\n", fact(3));
        return 0;
} 
…然后生成静态库(第2阶段)

…稍后执行静态库链接过程(第3阶段)

…并最终运行程序(第4阶段和最终阶段)

我的问题如下。让我们假设我的程序太大了,除了将头放在头目录(/include/fact.h)中,我别无选择,静态库也将放在另一个目录(/lib/libfact.a)中。在这种情况下,该程序的编译和/或代码将如何更改

编辑/问题解决:首先,修改了main.c,以便在另一个名为include的目录中包含标题。请记住,在本例中,两个.c文件都位于主目录中

main.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;
}
#include <stdio.h>
#include "include/fact.h"
int main(int argc, char *argv[])
{
        printf("%d\n", fact(3));
        return 0;
} 
这是你的答案

$gcc-static main.c-L-lfact-o事实

-L将目录添加到要搜索的目录列表中-L

它在你给的链接中。如果搜索方向正确且搜索范围较低,则不会出现问题。否则它不会编译代码。因为代码不知道头在哪里

这是你的答案

$gcc-static main.c-L-lfact-o事实

-L将目录添加到要搜索的目录列表中-L


它在你给的链接中。如果搜索方向正确且搜索范围较低,则不会出现问题。否则它不会编译代码。因为代码不知道头在哪里

您可以添加-I来指定包含路径


可以添加-I以指定包含路径


我尝试使用头目录(/include/fact.h)中的头,但它在主程序中给了我一个错误,表明文件fact.h不存在。也许这不仅仅是编译的问题,也许我必须在主程序的include中更改一些内容。请检查目录,你可能会把它写错。c://或c://或c://变体可能有问题。并尝试给出标题的确切位置,而不是搜索范围#包括“fact.h”这意味着它靠近主程序。您应该使用#include try来处理此问题。我尝试过,但问题仍然存在:主程序中出现错误,表明文件fact.h不存在。我解决了问题。命令你ṕ奥斯特德也在链接上工作。问题不在编译中,而在代码中。事实上,我用
#include“include/fact.h”
更正了include。不管怎样,谢谢=)我尝试使用头目录(/include/fact.h)中的头,但它在主程序中给了我一个错误,表明文件fact.h不存在。也许这不仅仅是编译的问题,也许我必须在主程序的include中更改一些内容。请检查目录,你可能会把它写错。c://或c://或c://变体可能有问题。并尝试给出标题的确切位置,而不是搜索范围#包括“fact.h”这意味着它靠近主程序。您应该使用#include try来处理此问题。我尝试过,但问题仍然存在:主程序中出现错误,表明文件fact.h不存在。我解决了问题。命令你ṕ奥斯特德也在链接上工作。问题不在编译中,而在代码中。事实上,我用
#include“include/fact.h”
更正了include。无论如何,谢谢=)与上面相同的问题:主程序中的错误指示文件fact.h不存在。与上面相同的问题:主程序中的错误指示文件fact.h不存在。