关于ubuntu 下libxml2的安装:
我在安装之前,当然也不例外的云百度上寻找了一番,于是我找到了如下文章:
http://www.linuxidc.com/Linux/2014-05/101925.htm
不得不说,这个文章写的真心好.当我在ubuntu的软件中心搜索libxml2时,我发现其实libxml2已经安装了
所以这里我就不再多说libxml2的安装了
关于IDE的选择
这里不想说shell + vi/vim/emacs这种开发方式,我是菜鸟,我不会这种
JAVA有Eclipse,C#有VS,些语言都有一个相当完善的IDE,对我们写程序的人来说,那是一大助力.
对于 C/C++来说,可选择的IDE还是非常的多的,就我知道就有:
Visul Studio:MS的,我只用过2010版本的,虽然不能跨平台,但是另上VSX后,那速度,有如神助
CodeBlocks:小,快,不占资源,总之很好,如果不是它的代码提示和自动完成不好,我绝对会选择这个
KDeveloper:据说很强大,不过我没用过
netbeans:用过一次,没有搞定,放弃之...
...
...
...
最后我的选择:
Eclipse + CDT:eclipse在写JAVA程序的时候,不说是一个最佳选择也差不了太多了,就是有点占用资源
其实我最开始用的就是CodeBlocks,这个东西真心好,但是从第一次使用,我就发现它的代码提示那是相当不好.后来偶尔的一次,我用了一下eclipse来写C,我发现它的代码提示,第三方插件,自动完成,都是比较容易掌握的,最重要的是它的代码编辑器那是相当的强大,我现在写纯C/C++程序,就是在eclipse中新建一个C/C++项目,然后用make + gcc编译,在shell中运行.当然还只是一些非常简单的makefile的编写
想对自己和新手说的话:
不论选择什么IDE,合适就好,最重要的是学会一个语言的核心,不能离了IDE就废了
关于在eclipse ide for c/c++ 中配置第三方库
其实我们在写C/C++项目时,不仅仅要到标准库,还要用到很多其他库,比如我想写界面,要用到gtk+,比如我要用XML文件来配置我的软件,此时就需要C语言的第三方库libxml2吧[能自己用C语言了解析XML文档的高手请略过],只不过我的程序中不想用mysql,oracle等数据库,而是用XML文件来代替数据库软件了.不论是因为什么原因吧,我们总要在eclipse中添加第三方库.下面说一下我的过程:
我在使用libxml2之前,搜索过怎样在eclipse中配置gtk,于是我找到了这个:
http://www.2cto.com/kf/201207/142182.html
在这篇文章中,使用了两个命令:
pkg-config --cflags gtk+-2.0 > include.txt
pkg-config --libs gtk+-2.0 > libs.txt
那个 > 是重定向的意思,不明白的可以自动略过,我看了几次,总结了一下在eclipse for c/c++ + gcc中配置第三方库的方法:
得到方该第三方法的头文件路径,并在相应位置添加之
得到方尺第三方库的库文件名和路径,并在相应位置添加之
设置编译命令
在eclipse中添加libxml2库
======================
于是经过我的尝试,我终于在ubuntu下完成了eclipse中配置libxml2的探索
使用xml2-config --cflags和xml2-config --libs命令得到libxml2的头文件路径以及库路径和库名
然后就是在eclipse中设置了,具体步骤:
新建一个C工程,右键->Properties->C/C++ General->Paths and Symbols
选择右边的includes中的GNU C,点击右边的Add,添加xml2-config --cflags的输出,比如我这里是:/usr/include/libxml2,其实你的机器上也应该一样,然后记得选择那个 Add to all configurations选项
然后选择Libraries,添加xml2-config --libs的输出,这里就不再截图了[之前这里写错了,现在上图]
再就是选择C/C++ Build,对command设置了,添加内容是:
`xml2-config --cflags --libs`
注意:两边是反引号[Tab上面的那个],不是单引号
这里是修改两个地方,都是GCC C Complier 的command选项,Debug 和Realease的command都要设置
但是在截图的时候,总是不完整,等我找个比较好的截图软件再上图
这里可能会和那个eclipse 配置GTK的有点出入,没有库路径,不过我看没有就没有设置,也成功了,在配置GTK时也是一样,具体原因我还不知道,可能是ubuntu已经把libxml2的路径添加到环境变量了吧.
然后就是把ubuntu下安装libxml2的那个文章中的代码添加到项目中测试之,如果没有问题,那么在你的项目文件夹下,应该会有一个XML文件
一个小例子
这里我贴一个代码例子,其实也是在Linux公社上找到的
/**********************************
created: 2014/05/12
filename: CreateXmlFile.c
auther: wang kai
depend: libxml2.lib
purpose: 创建一个xml文件
**********************************/
#include<stdio.h>
#include<libxml/parser.h>
#include<libxml/tree.h>
int main(int argc, char **argv) {
//Define document pointer
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
//Define node pointer
xmlNodePtr root_node = xmlNewNode(NULL, BAD_CAST "root");
//Set the root element of the document
xmlDocSetRootElement(doc, root_node);
//Create child nodes directly in the root node
xmlNewTextChild(root_node, NULL, BAD_CAST "newnode1",
BAD_CAST "newnode1 content");
xmlNewTextChild(root_node, NULL, BAD_CAST "newnode2",
BAD_CAST "newnode2 content");
//Create a new node
xmlNodePtr node = xmlNewNode(NULL, BAD_CAST "node2");
//Create a new text node
xmlNodePtr content = xmlNewText(BAD_CAST "NODE CONTENT");
//Add a new node to parent
xmlAddChild(root_node, node);
xmlAddChild(node, content);
//Create a new property carried by a node
xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
//Create a son and grandson node element
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"));
//Dump an XML document to a file
int nRel = xmlSaveFile("CreatedXml.xml", doc);
if (nRel != -1)
printf("一个xml文档被创建,写入 %d 个字节\n", nRel);
//Free up all the structures used by a document,tree included
xmlFreeDoc(doc);
//printf("Hello World!\n");
return 0;
}
Makefile
===========
在eclipse中的编译运行就不说了,主要说一下我的makefile例子:
# 功能:libxml2 的Makefile测试
#
# 作者:小代码
#
#时间:2014年 11月 23日 星期日 19:17:20 CST
PROGRAM=test
# 指定编译器
CC=gcc
# 指定编译选项
CFLAGS=-c -Wall `xml2-config --cflags`
# 指定连接时的库
LDADD=`xml2-config --libs`
# 指定删除命令及其选项
RM=rm -rf
# 默认目标
all:${PROGRAM}
# 创建主程序
${PROGRAM}:test.o
${CC} -o $@ $^ ${LDADD}
test.o:test.c
.PHNOY:clean run
# 清除中间文件及生成的可执行程序和生成的xml文件
clean:
-${RM} ${PROGRAM} *.o CreatedXml.xml
# 运行程序
run:
./${PROGRAM}
此Makefile来自gtk+的中文FAQ,原文:
4.3 如何使用make工具?
下面是一个非常简单的编译GTK+程序的Makefile:
# basic GTK+ app makefile
SOURCES = myprg.c foo.c bar.c
OBJS = ${SOURCES:.c=.o}
CFLAGS = `gtk-config --cflags`
LDADD = `gtk-config --libs`
CC = gcc
PACKAGE = myprg
all : ${OBJS}
${CC} -o ${PACKAGE} ${OBJS} ${LDADD}
.c.o:
${CC} ${CFLAGS} -c $<
# end of file
如果想进一步的了解make工具,你可以察看相应的man或者是info文件.
我把gtk-config替换为xml2-config,基本上没有遇到什么问题