代码之家  ›  专栏  ›  技术社区  ›  asendjasni

在C中使用静态库

  •  0
  • asendjasni  · 技术社区  · 6 年前

    我在github上为我的项目找到了一个有用的库,在构建完这个库之后,我尝试在它上使用一些预定义的函数。我无法编译我的项目,因为缺少一些头文件,例如:

    In file included from main.c:2:0:
    ptask.h:11:19: fatal error: ptime.h: No such file or directory
    

    我使用以下命令编译了我的项目:

    gcc main.c -L. -lptask
    

    这是项目文件夹中的所有文件:

    libptask.a  main.c  ptask.h
    

    这是库内容:

    $ ar -t libptask.a 
    pbarrier.c.o
    pmutex.c.o
    ptask.c.o
    ptime.c.o
    rtmode.c.o
    tstat.c.o
    libdl.c.o
    dle_timer.c.o
    calibrate.c.o
    

    我是否需要添加此文件的所有标题,或者在编译时只链接库?

    3 回复  |  直到 6 年前
        1
  •  1
  •   LeleDumbo    6 年前

    你的主要。C #include -s ptask。h依次为 #包括 -时间。h、 仅仅编译静态libs是不够的(这是链接器的工作),您仍然需要拥有所有使用过的头文件(这是编译器的工作),包括您使用的头文件和它们的依赖项,它们都是递归适用的。

        2
  •  1
  •   tadman    6 年前

    通常,您需要确保头文件位于“include path”中,这是许多编译器定义的 -I 作为命令行选项。您需要包括该库的源目录,或者如果它有 make install 选项,然后是安装位置。

        3
  •  1
  •   user3629249    6 年前

    关于:

    gcc main.c -L. -lptask
    

    这是在一个命令中执行编译步骤和链接步骤。

    它也没有启用警告,应该在编译步骤中始终启用警告。

    建议编译类似于以下内容的内容

    gcc -Wall -Wextra -Wconversion -pedantic -std=gnu11 -g -c main.c -o main.o -I.
    

    当您修复了所有警告后,请使用类似于以下内容的链接

    gcc main.o -o main -L. -lptask