在C中使用静态库

时间:2018-04-19 17:11:01

标签: c static-libraries

我在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

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

3 个答案:

答案 0 :(得分:1)

通常,您需要确保头文件位于“包含路径”中,许多编译器将-I定义为命令行选项。您需要包含该库的源目录,或者如果它具有make install选项,则需要包含它们的安装位置。

答案 1 :(得分:1)

你的main.c #include - s ptask.h反过来#include - s ptime.h。单独编译静态库是不够的(这是链接器的工作),你仍然需要拥有所有使用的头文件(这是编译器的工作),你使用的和它们的依赖关系,递归适用。

答案 2 :(得分:1)

关于:

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