在我的C项目中链接libxml2库时出现问题



我想在项目中使用libxml2 C库(我在Windows上,在CMD中使用gcc(。我正试图将它(作为一个静态库(包含在一个源文件中,这样我就可以使用它的函数了。但是,gcc在查找库的头文件时遇到了问题。那么,我如何配置gcc编译,以便它能够找到必要的头文件呢?

我的文件夹结构:

root
|
|--test.c
|--bin/--libxml2.a
|--lib/--libxml2.lib
|--include/--libxml/
|--c14v.h
|--parser.h
|--xmlstring.h
|--xmlversion.h
|... and many other header files

正如你在上面看到的,我已经编译了这个库。因此,我有它的归档(libxml2.a(和lib文件(libxml2.lib(,以及它的所有头文件(include/libxml/(。现在,我正在尝试编译下面这个简单的test.c文件:

#include <stdio.h>
#include "libxml/parser.h"
int main () {
return 0;
}

当我试图用gcc test.c -o test -I/include/ -L/bin/ -llibxml2命令编译它时,我得到了以下错误:

test.c:2:10: fatal error: libxml/parser.h: No such file or directory
2 | #include "libxml/parser.h"
|          ^~~~~~~~~~~~~~~~~
compilation terminated.

据我所知,我使用了-I-gcc选项,因为头文件在include文件夹中。但这并没有奏效。因此,我尝试删除include文件夹。所以我的文件夹结构变成:

root
|
|--test.c
|--bin/--libxml2.a
|--lib/--libxml2.lib
|--libxml/
|--c14v.h
|--parser.h
|--xmlstring.h
|--xmlversion.h
|... and many other header files

现在,使用gcc test.c -o test -L/bin/ -llibxml2,我得到了关于不同文件的相同错误。因此,gcc现在可以找到libxml/parser.h,但找不到libxml/xmlversion.h,它是libxml文件夹中的许多头文件之一。

In file included from test.c:2:
libxml/parser.h:15:10: fatal error: libxml/xmlversion.h: No such file or directory
15 | #include <libxml/xmlversion.h>
|          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.

我在这里做错了什么?我是否可以将include文件夹路径传递给gcc(使用-l或其他选项(,以便它可以找到存储在该文件夹中的所有头文件?

此外,我是否使用-l-L选项正确链接库?我这里有什么东西不见了?

谢谢你的帮助!

正如@KamilCuk在评论中指出的那样,我在gcc选项中定义的路径不正确。因此,解决整个问题的正确命令是:
gcc test.c -o test -Iinclude/ -Llib/ -l:libxml2.a

最新更新