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