1. 下载和安装LIBXML2

Libxml2是个C语言的XML程式库,能简单方便的提供对XML文件的各种操作,并且支持XPATH查询,及部分的支持XSLT转换等功能。Libxml2的下载地址是

http://xmlsoft.org/

,完全版的库是开源的,并且带有例子程式和说明文件。最佳将这个库先下载下来,因为这样能查看其中的文件和例子。

由于我是在linux下用C语言进行研发的,所以我下载的是libxml2-2.6.20.tar.gz版本的源码包。

具体安装步骤:

解压:$tar zxvf libxml2-2.6.20.tar.gz

进入解压后的安装目录:$cd libxml2-2.6.20

安装三部曲:1 )$./configure

2 )  $make

3 )  $make install

安装完毕。

2.libxml资料查询

关于libxml库的相关头文件和API在这里我就不介绍了,内容太多,可以参考相关资料,进入libxml官方网站:http://xmlsoft.org/。

3.一个简单程序的编译

#include

#include

#include

#include

#include

int main()

{

xmlDocPtr doc=xmlNewDoc(BAD_CAST"1.0");

xmlNodePtr root_node=xmlNewNode(NULL,BAD_CAST"root");

xmlDocSetRootElement(doc,root_node);

xmlNewTextChild(root_node,NULL,BAD_CAST "newNode1",BAD_CAST "newNode1 content");

xmlNewTextChild(root_node,NULL,BAD_CAST "newNode2",BAD_CAST "newNode2 content");

xmlNewTextChild(root_node,NULL,BAD_CAST "newNode3",BAD_CAST "newNode3 content");

xmlNodePtr node=xmlNewNode(NULL,BAD_CAST "node2");

xmlNodePtr content=xmlNewText(BAD_CAST "NODE CONTENT");

xmlAddChild(root_node,node);

xmlAddChild(node,content);

xmlNewProp(node,BAD_CAST "attribute",BAD_CAST "yes");

node=xmlNewNode(NULL,BAD_CAST "son");

xmlAddChild(root_node,node);

xmlNodePtr grandson=xmlNewNode(NULL,BAD_CAST "grandson");

xmlAddChild(node,grandson);

xmlAddChild(grandson,xmlNewText(BAD_CAST "This is a grandson node"));

int nRel=xmlSaveFile("CreatedXml.xml",doc);

if(nRel!=-1)

{

xmlFreeDoc(doc);

return 1;

}

}

在用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

#include

默认会到/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 链接文件的时候,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函数库”

linux编译安装libxml2,libxml2的编译与安装相关推荐

  1. linux安装了xml怎么编译,linux下libxml库的安装及编译

    linux下libxml库的安装及编译 1. 下载和安装LIBXML2 Libxml2是个C语言的XML程式库,能简单方便的提供对XML文件的各种操作,并且支持XPATH查询,及部分的支持XSLT转换 ...

  2. 安装debian总结以及编译linux内核

    1. 安装debian 使用unetbootin(http://unetbootin.sourceforge.net/)来创建启动盘,并且下载debian的基本包. 将磁盘进行压缩操作,并且保留出一个 ...

  3. linux mysql编译安装mysql_【MySQL安装】Linux下安装MySQL(预编译)

    预编译方式安装MySQL 一.环境说明 操作系统:Redhat Linux 7.2 MySQL版本:5.7 安装介质:mysql-5.7.25-linux-glibc2.12-x86_64.tar.g ...

  4. linux 下脚本安装 mysql_linux(centos7)下编译安装mysql(数据库)一键安装详解+脚本文件...

    一.下载源文件 官网下载地址: https://downloads.mysql.com/archives/community/ 二.安装前准备 (1).开始之前先把虚拟机内存调大,避免安装时间过长和卡 ...

  5. 百度开源 FAQ 问答系统(AnyQ)安装---Linux(无docker)+小白编译AnyQ-dockerlinux[CentOs]

    小白编译AnyQ-docker&linux[CentOs]--AnyQ系列之一https://blog.csdn.net/u011818766/article/details/10411746 ...

  6. linux 安装源码网卡包,【linux命令】Linux通过yum 或者源码编译安装vnstat查看网卡流量...

    Linux通过vnstat查看网卡流量有两种安装方式: yum 安装或者源码编译安装. 1,yum安装. 直接运行yum install vnstat  -y 安装完后测试: [[email prot ...

  7. Linux Ubuntu编译内核错误,安装ubuntu以后,编译kernel出错

    安装ubuntu以后,编译kernel出错 qyy@qyy-virtual-machine:~/work/kernel$ make CHK     include/linux/version.h CH ...

  8. [FirefoxOS_开发环境]Linux和Ubuntu环境下B2G(Firefox OS)安装、编译、测试教程集合

    1在ubuntu上测试Firefox OS(B2G)系统 Firefox OS,项目代号为"Boot 2 Gecko",是一个开放的完全基于WEB标准的智能手机操作系统,由Mozi ...

  9. linux 安装apache apu,Apache编译安装

    环境信息: 主机1:dns-ftpcentos6.5提供dns解析和yum源码ftp等192.168.200.254 主机2:www.leslie.comcentos6.5架设网站192.168.20 ...

  10. LINUX - 实时LINUX内核(PREEMPT_RT)的编译安装以及测试

    目录 1.什么是实时性操作系统? 2.怎么实现实时性系统? 3.PREEMPT_RT 4.使用方法 4.1下载linux内核源码 4.2下载RT patch 4.3 使用方法 5.测试 6.总结 7. ...

最新文章

  1. mysql sql 语句事务_MySQL: 3、SQL语言 ②约束、事务
  2. 谷歌和Facebook正在吸走欧洲的人才
  3. Repeater控件使用总结
  4. 我用 Python 帮朋友做了张图,结果
  5. 5加载stm32 keil_KEIL 那些编辑技巧与方法
  6. Java动态性(3) - 脚本引擎执行javascript代码
  7. Mybatis中的StatementType
  8. Hive导入和导出数据
  9. centos 7和centos6修改默认启动模式的方法
  10. Rust : evmap库多读多写尝试
  11. 【Java小工匠聊密码学】--对称加密--DES
  12. 如何用python画矿物分布地图_python怎么画出分布图?
  13. Java面试被问特长,面试官问“你有什么特长”,这三种回答堪称完美,拿走不谢...
  14. 易观CTO郭炜:开源,不是天才的甜点,而是勤奋者的盛宴
  15. Invalid bound statement (not found): com.cwp.study.dao.user.mapper.UserDao.selectByPrimaryKey解决办法
  16. 微信公众号-JS接口安全域名-配置域名保存失败
  17. 分享|2023年全球市场准入认证咨讯
  18. chapter-13-生成式模型
  19. 轻松bypass360网站卫士WAFSQL注入防护
  20. PHP框架之ThinkPHP

热门文章

  1. 网络流(17/24)
  2. 下载ts流视频的成功方法
  3. 3ds Max 2012 简体中文版 带注册机32位64位
  4. 华为销售用一封邮件撬走阿里云千万级客户罗振宇的《得到》
  5. python读取dat文件代码-基于python批量处理dat文件及科学计算方法详解
  6. win7 设置共享无线网络
  7. RapidXml用法
  8. 基于java的试题库管理系统(java CS窗体版)
  9. python爬取豆瓣书籍_Python爬取豆瓣读书
  10. 聚类分析与SPSS实现——《社会统计分析方法》