程序是在windows Gcc mingw中运行一个c程序解析一个xml文件。 但是在编译时我得到了 xml2-config not found ,--libs unrecognized commands,--cflags unrecognized commands。
我已将 libxml 文件“libxml libxslt iconv”添加到环境路径。
最佳答案
当您编写使用第三方库(如 libxml
)的程序时,通常你有两个问题:
您需要告诉编译器库的头文件安装在哪里,这样当您的代码显示类似
#include <xml.h>
的内容时编译器将能够找到它们。您需要告诉链接器库本身的安装位置。
如果您未能正确执行第 1 步,通常会收到类似“错误:找不到‘xml.h’文件”的错误。
如果您没有设法正确执行第 2 步,您通常会收到类似“ undefined symbol :_xmlparse”或“找不到 -llibxml 的库”之类的错误。 (“ undefined symbol ”意味着编译器甚至不知道要查找该库,因此它会提示说没有可以在其中找到的函数的定义。“找不到 -llibxml 的库”意味着您告诉编译器要查找哪个库,但找不到它。)
在 Unix 下的 C 编译器上,无论如何,您使用 -I
告诉编译器在哪里查找头文件。标志,像这样:
cc -Idirectory_where_extra_header_files_are -c test.c
您告诉编译器/链接器使用 -l
加载额外的库标志:
cc test.o -llibxml
您使用 -L
告诉编译器/链接器在哪里找到那个额外的库标志:
cc test.o -Ldirectory_where_extra_library_files_are -llibxml
但这可能会很麻烦。许多第三方库都带有“配置”程序,这些程序应该可以帮助您解决这个问题。像这样的调用
xml-config --cflags
打印字符串
-Idirectory_where_the_libxml_header_files_are
所以你知道要添加什么到 cc
修复问题 1 的行。还有一个类似的调用
xml-config --libs
打印字符串
-Ldirectory_where_the_libxml_libraries_are -llibxml
所以你知道要添加什么到 cc
修复问题 2 的行。
然后,最后,这个工具旨在用于 Unix shell 的一种特殊机制,反引号,它允许您获取一个命令的输出并将其插入另一个命令行:
cc `xml-config --cflags --libs` test.c
这实际上运行了 xml-config
命令,收集其输出(即 xml-config
打印出的任何内容),并将该输入插入命令行,就像您键入它一样,然后最终运行 cc
命令与那些额外的参数。这是一种方便的机制,但如果您使用的是 Windows,则可能无法使用它。
所以如果您在类 Unix 系统上并且如果 xml-config
程序安装在 shell 可以找到的位置,如果头文件和库安装在 xml-config
的位置认为它们是,然后使用 xml-config
可以很方便。但是,如果这些事情中的任何一个不是真的,整个机制就会崩溃,您可能不得不“手动”做事。
“手工”做事并非不可能,甚至也不是特别困难。在发明这种“配置”工具帮助机制之前,我们总是这样做。如上所述,只需使用 -I
编译时告诉编译器头文件在哪里:
cc -Idirectory_where_the_libxml_header_files_are -c test.c
使用 -L
和 -l
告诉它图书馆在哪里:
cc test.o -Ldirectory_where_the_libxml_libraries_are -llibxml
关于c - 编译 libxml2 时找不到 xml2-config 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57269920/