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