在 C 中使用静态库

Using a static library in C

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

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

我是否需要在编译时添加此文件的所有 header 或只添加 link 库?

通常您需要确保头文件在您的 "include path" 中,这是许多编译器使用 -I 定义的命令行选项。您需要包括该库的源目录,或者如果它有 make install 选项,则包括它们的安装位置。

你的 main.c #include-s ptask.h 又 #include-s ptime.h。仅编译静态库是不够的(这是链接器的工作),您仍然需要拥有所有使用的头文件(这是编译器的工作),包括您使用的头文件及其依赖项,递归适用。

关于:

gcc main.c -L. -lptask

这是在一条命令中执行编译步骤和 link 步骤。

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

建议类似下面的编译

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

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

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