最近需要用c++实现解析xml文件的功能,经过对若干方法的考察,决定使用libxml库
安装libxml:
apt-get install libxml2-dev
安装完毕之后会在/usr/lib/libxml/libxml2/目录下找到一系列的头文件,包括等一下要用到的parser.h和tree.h
同时,可以locate一下libxml2.so,发现被安装在标准目录/usr/lib/中
安装完毕之后,就可以开始编写解析xml的c++代码了
包含头文件时,我一开始直接使用绝对路径
#include<libxml/libxml2/parser.h>
#include<libxml/libxml2/tree.h>
编译:g++ -o creatxmlfile creatxmlfile.cpp -lxml2
报错:/usr/include/libxml2/libxml/parser.h:15:31:fatal error: libxml/xmlversion.h:No such file or directory
说明光在自己的代码中加入头文件parser.h的路径是不行的,因为头文件parser.h中还嵌套包含了其他的头文件,而嵌套包含时使用的是到/libxml为止相对路径(及标准路径)
解决:使用到/libxml为止的标准路径,再在编译时加入-I参数来指定具体的路径
因此,包含头文件的方式改成
#include<libxml/parser.h>
#include<libxml/tree.h>
另外,由于库文件libxml2.so放在路径/usr/lib中,这个路径已存在于环境变量中,因此在编译时无需使用编译器的-L参数来指定库文件的具体位置,只需使用-l参数来指定库文件的具体名称:
g++ -o creatxmlfile creatxmlfile.cpp -I /usr/include/libxml2/ -lxml2
安装libxml:
apt-get install libxml2-dev
安装完毕之后会在/usr/lib/libxml/libxml2/目录下找到一系列的头文件,包括等一下要用到的parser.h和tree.h
同时,可以locate一下libxml2.so,发现被安装在标准目录/usr/lib/中
安装完毕之后,就可以开始编写解析xml的c++代码了
包含头文件时,我一开始直接使用绝对路径
#include<libxml/libxml2/parser.h>
#include<libxml/libxml2/tree.h>
编译:g++ -o creatxmlfile creatxmlfile.cpp -lxml2
报错:/usr/include/libxml2/libxml/parser.h:15:31:fatal error: libxml/xmlversion.h:No such file or directory
说明光在自己的代码中加入头文件parser.h的路径是不行的,因为头文件parser.h中还嵌套包含了其他的头文件,而嵌套包含时使用的是到/libxml为止相对路径(及标准路径)
解决:使用到/libxml为止的标准路径,再在编译时加入-I参数来指定具体的路径
因此,包含头文件的方式改成
#include<libxml/parser.h>
#include<libxml/tree.h>
另外,由于库文件libxml2.so放在路径/usr/lib中,这个路径已存在于环境变量中,因此在编译时无需使用编译器的-L参数来指定库文件的具体位置,只需使用-l参数来指定库文件的具体名称:
g++ -o creatxmlfile creatxmlfile.cpp -I /usr/include/libxml2/ -lxml2
至此,已可以使用libxml2来编写用于解析xml的c++文件了
转自 http://trollybupt.blog.163.com/blog/static/2091672032013431101824926/