在用libxml2尝试做解析xml文件,编译的时候出现了找不到头文件的错误:
[nigelzeng@myhost xml-learning]$ gcc -o xml-build xml-build.c
xml-build.c:4:30: libxml/xmlmemory.h: 没有那个文件或目录
xml-build.c:5:27: libxml/parser.h: 没有那个文件或目录
xml-build.c:8: error: syntax error before "doc"
xml-build.c: In function `parseStory':
xml-build.c:9: error: `xmlChar' undeclared (first use in this function)
xml-build.c:9: error: (Each undeclared identifier is reported only once
xml-build.c:9: error: for each function it appears in.)
……
问题出自啊c文件里的include:
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
默认会到/usr/include 目录下搜索,但是不存在libxml目录,而libxml是在/usr/include/libxml2/libxml 下。
所以我先做了一个软连接:
[nigelzeng@myhost xml-learning]$ ln -s /usr/include/libxml2/libxml /usr/include/libxml
再尝试着编译,路径的问题是解决了,但是链接库的问题还在,内建的函数找不到:
[nigelzeng@myhost xml-learning]$ gcc -o xml-build xml-build.c
/tmp/cc62WqCk.o(.text+0x24): In function `parseStory':
: undefined reference to `xmlStrcmp'
/tmp/cc62WqCk.o(.text+0x3e): In function `parseStory':
: undefined reference to `xmlNodeListGetString'
/tmp/cc62WqCk.o(.text+0x62): In function `parseStory':
: undefined reference to `xmlFree'
/tmp/cc62WqCk.o(.text+0x85): In function `parseDoc':
: undefined reference to `xmlParseFile'
/tmp/cc62WqCk.o(.text+0xb7): In function `parseDoc':
: undefined reference to `xmlDocGetRootElement'
/tmp/cc62WqCk.o(.text+0xe4): In function `parseDoc':
: undefined reference to `xmlFreeDoc'
/tmp/cc62WqCk.o(.text+0xff): In function `parseDoc':
: undefined reference to `xmlStrcmp'
/tmp/cc62WqCk.o(.text+0x127): In function `parseDoc':
: undefined reference to `xmlFreeDoc'
/tmp/cc62WqCk.o(.text+0x14e): In function `parseDoc':
: undefined reference to `xmlStrcmp'
/tmp/cc62WqCk.o(.text+0x17c): In function `parseDoc':
: undefined reference to `xmlFreeDoc'
collect2: ld returned 1 exit status
在网上搜索了下答案,可以在gcc命令后加上 -I 和 -l 参数解决:
[nigelzeng@myhost xml-learning]$ gcc -o xml-build xml-build.c -I/usr/include/libxml2/ -lxml2
用这个命令,所有的错误都解决了,成功编译出来需要的执行文件。
这个 -I 和 -l 的参数解释是这样的:
“
-Idir 当用#include <file> 链接文件的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他会先在你所制定的目录查找,然后再按常规的顺序去找。
-llibrary 制定编译的时候使用的库。
例子用法: gcc -lcurses hello.c /* 使用ncurses库编译程序 */
”
所以“gcc -o xml-build xml-build.c -I/usr/include/libxml2/ -lxml2”命令的意思就是“在指定目录/usr/include/libxml2里寻找头文件,编译时使用的库是xml2函数库”
ps:
这个命令也可以成功编译:gcc `xml2-config --cflags --libs` -o xml-create xml-create.c
分享到:
相关推荐
纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法,并有注解 ...
1. **解析**: libxml2提供了解析XML文档的API,可以将XML字符串或文件转化为内存中的树结构,方便后续操作。解析过程中,libxml2能够处理命名空间、属性、注释和处理指令等元素。 2. **验证**: 支持DTD(Document ...
王柱石wzs 纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法...
在C语言中解析XML文件,我们可以利用开源库libxml2,这是一个功能强大且广泛使用的库,提供了XML处理的各种功能,包括解析、验证、序列化和XPath查询。 在Linux环境下,要使用libxml2库,首先需要下载并安装。从ftp...
在C语言环境中,处理XML文档时通常会借助第三方库,其中libxml2库是一个非常流行的开源选择。libxml2是由 GNOME 项目开发的,它提供了全面的XML处理功能,包括解析、序列化、DOM、SAX接口、XPath支持以及DTD验证等。...
minixml是一个小型、轻量级的C语言XML解析库,特别适合资源有限的嵌入式环境。它提供了一套简单的API,用于读取XML文档,提取元素、属性和文本内容。使用minixml,开发者无需了解XML解析的底层细节,只需关注如何在...
此函数将XML文件内容转化为一个`xmlDoc`结构体,这是libxml2中表示XML文档的主要数据结构。 2. **遍历XML树**:解析完成后,我们可以使用`xmlDocGetRootElement`获取XML文档的根元素,并通过`xmlIterateChildren`等...
而DOM则将整个XML文档加载到内存中,形成一个树形结构,便于遍历和操作,但对内存要求较高。 2. **创建和序列化(Creation and Serialization)**:库还应提供创建XML文档和将数据结构写回XML文件的功能。这可能...
为了更好地演示如何使用libxml2进行XML文件的读写,以下是一个简单的示例,展示了如何创建XML文件和解析XML文件: **1. 创建XML文件** ```c #include <libxml/xmlwriter.h> #include int main() { ...
总的来说,ExpatXML提供了一种高效且灵活的方式来处理XML文档,对于需要在C语言环境中解析XML的应用来说,它是一个不可或缺的工具。通过理解其工作原理和使用方法,开发者能够有效地利用ExpatXML处理各种XML数据。
4. **测试与调试**:编写测试用例,确保解析器能够正确解析XML并执行XPath查询,同时修复可能出现的问题。 在实际应用中,C语言XML解析器可以用于各种场景,如配置文件读写、网络数据交换、数据库同步等。XPath的...
在解析XML文档时,我们通常会使用`xmlReadFile()`或`xmlReadMemory()`函数,它们可以读取文件或内存中的XML数据并返回一个`xmlDocPtr`类型的指针,代表XML文档的结构树。 在本示例中,可能包含以下步骤: 1. **包含...
在C语言中解析XML文件并非易事,因为C没有内置的XML处理库,但我们可以借助第三方库或者自定义算法来实现。本案例中,描述提到了使用C语言在x86平台上实现XML文件的解析和查询,并利用`list_head`双向链表存储XML...
总的来说,Minixml是一个适用于C语言环境的轻量级XML库,具备XML解析、生成、查找和添加等多种功能,尤其适合资源受限或高性能需求的场景。其丰富的文档资料和清晰的API设计,使得开发人员能够高效地利用XML进行数据...
1. **XML解析**:Libxml2提供了`xmlParseFile()`等函数,可以解析XML文件并生成内存中的XML树结构。 2. **XPath查询**:利用`xmlXPathEvalExpression()`等函数,可以根据XPath表达式查找XML树中的节点。 3. **编码...
标题中的“一个纯C的解析XML的类库”指的是这个压缩包包含了一个用纯C语言编写的XML解析器。XML(eXtensible Markup Language)是一种广泛应用的数据交换格式,常用于存储和传输结构化数据。纯C实现意味着该库不依赖...
标题中的“VS编译纯C文件的方法”是指在Visual Studio(VS)环境下,特别是VS2008,如何编译和运行C语言源代码。在描述中提到了VS2008相对于较旧版本的VC6.0的优势,如更好的集成度、更智能的代码提示以及对Windows ...
6. **Makefile**:这是一个构建文件,通常用于自动化编译和链接过程。通过执行`make`命令,可以编译源代码并生成所需的库和可执行文件。 7. **LuaXml.lua**:这可能是一个示例脚本或测试文件,展示了如何在Lua中...
而`google`文件可能是一个源码包,包含了用C语言实现的Google Search API客户端和XML解析器的代码。 开发这样一个系统需要对HTTP协议有一定理解,因为我们需要发送HTTP请求到Google API服务器,并接收返回的数据。...