linux安装了xml怎么编译,linux下libxml库的安装及编译
linux下libxml库的安装及编译
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@myhostxml-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 1exit 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函数库”
ps:
这个命令也可以成功编译:gcc `xml2-config --cflags --libs` -o xml-create xml-create.c
linux安装了xml怎么编译,linux下libxml库的安装及编译相关推荐
- linux编译安装jpeg,Linux下jpeglib库的安装详解
Linux下jpeglib库的安装详解 首先要下载所需的库压缩包:jpegsrc.v6b.tar.gz或 jpegsrc.v8b.tar.gz 然后将下载的压缩包随便放在和解压到你喜欢的地方. # t ...
- 【Linux开发】Linux下jpeglib库的安装详解
Linux下jpeglib库的安装详解 首先要下载所需的库压缩包:jpegsrc.v6b.tar.gz或 jpegsrc.v8b.tar.gz 然后将下载的压缩包随便放在和解压到你喜欢的地方. # t ...
- Linux下MKL库的安装部署与使用,并利用cmake编译器调用MKL库去提升eigen库的计算速度
文章目录 前言 一.MKL库的下载 二.MKL库的安装与配置 1.MKL库的安装与配置 2.代码测试 总结 前言 在用C/C++编写模型预测控制算法(MPC)的代码时候,由于预测步长和控制步长的设置较 ...
- libevent 源码阅读 Ubuntu下muduo库的安装与使用
libevent源码分析--代码结构_鱼思故渊的专栏-CSDN博客 LINUX实战:Ubuntu下muduo库的安装与使用 LINUX实战:Ubuntu下muduo库的安装与使用-LINUX入门-维易 ...
- Python3.5在Windows7环境下Scrapy库的安装
Python3.5在Windows7环境下Scrapy库的安装 忙活了一下午,总算是把Scrapy库给装完了,记下来给需要帮助的人 首先安装的环境:Windows7 64位 Python的版本是:3. ...
- 【linux】centos7下muduo库的安装
特别提醒:建议在普通用户模式下安装muduo库 普通用户模式下的centos7,安装muduo库需要给普通用户授权.授权方法采纳如下博客: https://www.cnblogs.com/mrcln/ ...
- linux 和 Windows下FFTW库的安装
我整理了FFTW在windows和linux下安装的过程,我自己也在这两个系统中安装成功了,还是遇到不少问题的,我接下来把网上搜到的资料和自己遇到的问题一一告诉大家,让大家少走弯路. windows ...
- linux环境下pandas库的安装,linux安装pandas
1.1.Numba的约5分钟指南 Numba是Python的即时编译器,它最适用于使用NumPy数组和函数以及循环的代码.使用Numba的最常用方法是通过其装饰器集合,可以应用于您的函数来指示Numb ...
- linux——ekho7.7.1(最新版)语音合成库的安装与编译
前言 ~~~~~ TTS技术,TTS是Text To Speech的缩写,即"从文本到语音".它将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的汉语口语 ...
最新文章
- BizTalk开发系列(二十三) BizTalk性能指标参考
- java面试换背景颜色_实习|渣二本Java菜鸡0 Offer的春招血泪史,一定要主动去找实习呀!
- 二叉排序树删除子节点以及遍历
- 2017-2018年Scrum状态调查报告
- HTML5学习笔记简明版(11):新API
- 品质管控计划ppt怎样写_线上求助:怎么写好PPT年终总结和年度计划?
- matlab教程曲线拟合,matlab 曲线拟合
- STM8S103之串口查询发送+中断发送
- 正确的价值观和干部队伍引领华为走向长久成功
- 新浪云应用 mysql_云应用开发之新浪SAE读写云端数据库MySQL
- 吞食天地2蜀汉英雄传1.5版图文攻略
- http响应码code含义
- window10关闭磁盘bitlocker加密
- Doris内置函数Split_part()性能影响分析测试
- java 遍历二叉树_java实现二叉树遍历的三种方式
- PS初体验:熟悉快捷键
- java的 反射机制
- 推荐5个堪称神器的学习网站,在家你值得拥有
- Linux - ImageMagick 6.9.10-5安装配置
- lua脚本编辑器SciTE设置背景颜色
热门文章
- 贪心+单调栈——去除重复字母(Leetcode 316)
- PAT乙级(1016 部分A+B)
- reentrantlock失效了?_ReentrantLock 源码简单分析
- 周五下午3h直播丨2021第5期大咖讲坛:数据库安全与智能运维
- 故障诊断 | 存储Cache丢失导致数据库无法open的案例分享
- 论文阅读丨神经清洁: 神经网络中的后门攻击识别与缓解
- 深度学习在其他领域的应用1:密码破解
- 机器学习笔记(一)----基本概念
- 开发者如何学好 MongoDB
- ajax异步提交 java_jquery ajax异步上传