ubuntu 下 eclipse配置libxml2库

Wesley13
• 阅读 687

关于ubuntu 下libxml2的安装:

我在安装之前,当然也不例外的云百度上寻找了一番,于是我找到了如下文章:

http://www.linuxidc.com/Linux/2014-05/101925.htm

不得不说,这个文章写的真心好.当我在ubuntu的软件中心搜索libxml2时,我发现其实libxml2已经安装了

ubuntu 下 eclipse配置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的头文件路径以及库路径和库名

ubuntu 下 eclipse配置libxml2库

然后就是在eclipse中设置了,具体步骤:

新建一个C工程,右键->Properties->C/C++ General->Paths and Symbols

选择右边的includes中的GNU C,点击右边的Add,添加xml2-config --cflags的输出,比如我这里是:/usr/include/libxml2,其实你的机器上也应该一样,然后记得选择那个 Add to all configurations选项

ubuntu 下 eclipse配置libxml2库

然后选择Libraries,添加xml2-config --libs的输出,这里就不再截图了[之前这里写错了,现在上图]

ubuntu 下 eclipse配置libxml2库

再就是选择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,基本上没有遇到什么问题

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 1.eclipseapi(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这