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

Problem at linking libxml2 library in my C project

我想在项目中使用 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