我在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?
答案 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