Linux tinyxml中文乱码,【原创】Linux 下配置Tinyxml

版权声明:本文为博主原创文章,未经博主容许不得转载。

linux

静态库编译:ios

2.执行解压命令:tar -xzvf xxxxx.tar.gz编辑器

3.成功以后进入tinyxml目录:cd tinyxmlide

4.使用vim或者其余的编辑器打开Makefile文件:vim Makefile测试

5.将OUTPUT := xmltest 改成OUTPUT := libtinyxml.aui

3b465216805b4550afdd749a.html

6.xmltest.cpp删除,由于它只是一个测试源文件,不须要编译。spa

3b465216805b4550afdd749a.html

7.将${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改成:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}.net

3b465216805b4550afdd749a.html

8.将Makefile的倒数第二行 xmltest.o:tinyxml.h tinystr.h,注释掉,由于不须要将演示程序添加到静态库中。而后保存退出orm

3b465216805b4550afdd749a.html

9.执行make命令编译,便可在Makefile所在目录下生成libtinyxml.a文件。

10.而后可使用这个静态库了:$ g++ -o xmltest xmltest.cpp libtinyxml.a    注意:将使用的静态库放在源文件后面便可,若是静态库文件不在当前目录,应该使用它的绝对路径或者用g++的参数-L来指定路径,由于编译器默认在当前目录下先查找指定的库文件。

动态编译:

改变上面两个步骤,便可将静态编译变成动态编译

1.将步骤(5)OUTPUT := xmltest一行修改成:OUTPUT := libtinyxml.so

2.将步骤(7)${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改成:在"${LD}"后面加一个参数:-shared用于生成动态库。

为何通过上述对Makefile文件的更改会生成静态库和动态库呐?

接下来咱们来了解一下:

1.库文件是如何生成的:

静态库:先将源文件编译成目标文件:gcc  -c  test.c  test1.c生成静态库:ar  -rc libstatic.a test.o  test1.o

共享库:先将源文件编译成目标文件:gcc  -c  test.c  test1.c生成共享库:gcc -fPIC -shared -o libshared.so test.o test1.o  //f后面跟一些编译选项,PIC是其中一种,表示生成位置无关代码(Position Independent Code)通常用在编译动态库的时候,ar命令能够用来创建或修改备存文件,或是从备存文件中抽取文件。

再看Makefile文件从文件分析能够看出OUTPUT为最终的目标,所以修改OUTPUT变量的值能够改变最终生成的文件的名字,改成libtinyxml.a则生成的文件名就为libtinyxml.a。而OUTPUT的生成则依赖于OBJS变量,和下面的命令:${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS},由LD     := g++能够看出,LD变量为g++命令,所以在${LD}后加上一个-shared选项,就能够生成动态库文件。由AR     := ar rc能够看出,AR变量为ar命令,所以把${LD}改成${AR},而且把-o选项删除,就能够生成静态库文件。

【注】要把Tinyxml移植到嵌入式开发平台下,只须要把CXX    := g++改成CXX    :=arm-linux-g++,即把编译器改成交叉编译器。

接下来写个测试程序,看是否配置成功

在tinyxml目录建立一个测试的xml文件,文件名为test.xml,内容以下:

周星星

20

白晶晶

18

在tinyxml下建立,也添加了一个测试程序tinyxml_test.cpp,内容以下:

#include "tinyxml.h"

#include "tinystr.h"

#include 

usingnamespacestd;

intmain()

{

//建立一个XML的文档对象。

TiXmlDocument *myDocument = newTiXmlDocument("test.xml");

myDocument->LoadFile();

//得到根元素,即Persons。

TiXmlElement *RootElement = myDocument->RootElement();

//输出根元素名称,即输出Persons。

cout <Value() <

//得到第一个Person节点。

TiXmlElement *FirstPerson = RootElement->FirstChildElement();

//输出接点名Person

cout <Value() <

//得到第一个Person的name节点和age节点和ID属性。

TiXmlElement *NameElement = FirstPerson->FirstChildElement();

TiXmlElement *AgeElement = NameElement->NextSiblingElement();

TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();

//输出第一个Person的name内容,即周星星;age内容,即20;ID属性,即1。

cout <FirstChild()->Value() <

cout <FirstChild()->Value() <

cout <Value() <

return0;

} 再修改Makefile的部分代码以下:

#****************************************************************************

# Targets of the build

#****************************************************************************

OUTPUT := xmltest

LIB := libtinyxml.so

TEST:= tinyxml_test

all: ${OUTPUT} ${LIB} ${TEST}

#****************************************************************************

# Source files

#****************************************************************************

SRCS := tinyxml.cpp tinyxmlparser.cpp tinyxml_test.cpp tinyxmlerror.cpp tinystr.cpp

而后执行make,这时,能够看到多了一个tinyxml_test 生成,执行tinyxml_test,获得以下输出结果:

3b465216805b4550afdd749a.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值