您的位置:首页 > 运维架构 > Linux

Linux下将Tinyxml编译为静态库

2011-04-21 10:49 483 查看
一个应用需要在linux服务器上运行,不能保证每个服务器都有应用依赖的库,又懒得每个服务器都去安装下,也不太现实,于是就将应用所用到的库全部编译为静态库,直接丢到服务器上跑吧。此为应用调用xml配置文件依赖tinyxml库示例,记录下,备忘。

1.下载tinyxml库,直接从官方下载,http://sourceforge.net/projects/tinyxml/。

2.解压缩下载好的包,我解压缩到test目录下,进入项目目录。

3.使用vim编辑器修改Makefile文件:

将其中的OUTPUT := xmltest一行修改为:OUTPUT := libtinyxml.a
将xmltest.cpp从SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中删除,,注释掉xmltest.o:tinyxml.h tinystr.h。因为不需要将演示程序添加到动态库中。
将${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改为:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}。
保存退出。
4.执行make命令编译,即可在当前目录生成libtinyxml.a文件。

5.调用测试,当前目录新建一个test.cpp文件,内容如下:

view sourceprint?01 #include "tinyxml.h"

02 #include "tinystr.h"

03 #include

04 using namespace std;

05

06 int main()

07 {

08 //创建一个XML的文档对象。

09 TiXmlDocument *myDocument = new TiXmlDocument("test.xml");

10 myDocument->LoadFile();

11

12 //获得根元素,即Persons。

13 TiXmlElement *RootElement = myDocument->RootElement();

14

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

16 cout << RootElement->Value() << endl;

17

18 //获得第一个Person节点。

19 TiXmlElement *FirstPerson = RootElement->FirstChildElement();

20 //输出接点名Person

21

22 cout << FirstPerson->Value() << endl;

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

24 TiXmlElement *NameElement = FirstPerson->FirstChildElement();

25 TiXmlElement *AgeElement = NameElement->NextSiblingElement();

26 TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();

27

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

29 cout << NameElement->FirstChild()->Value() << endl;

30 cout << AgeElement->FirstChild()->Value() << endl;

31 cout << IDAttribute->Value() << endl;

32

33 return 0;

34 }

创建test.xml文件,内容如下:

view sourceprint?01

02

03 周星星

04 20

05

06

07 白晶晶

08 18

09

10

编译当前文件,调用libtinyxml.a库:

[root@server tinyxml]# g++ -o test test.cpp ./libtinyxml.a

执行编译好的程序:

[root@server tinyxml]# ./test
Persons
Person
周星星
20
1

将编译好的test和test.xml放至另外一台没有tinyxml的库,执行成功。

以上代码在centos5.4上测试正常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: