【原创】Linux 下配置Tinyxml

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


静态库编译:

1.先从官网将tinyxml库下载下来。连接:http://sourceforge.net/projects/tinyxml/

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

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

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

5.将OUTPUT := xmltest 改为OUTPUT := libtinyxml.a


6.xmltest.cpp删除,因为它只是一个测试源文件,不需要编译。


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


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


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,内容如下:

  1. <Persons>  
  2.         <Person ID="1">  
  3.             <name>周星星</name>  
  4.             <age>20</age>  
  5.         </Person>  
  6.         <Person ID="2">  
  7.             <name>白晶晶</name>  
  8.             <age>18</age>  
  9.         </Person>  
  10.     </Persons>  
在tinyxml下创建,也添加了一个测试程序tinyxml_test.cpp,内容如下:

  1. #include "tinyxml.h"  
  2. #include "tinystr.h"  
  3.   
  4. #include <iostream>  
  5.   
  6. using namespace std;  
  7.   
  8. int main()  
  9. {  
  10.     //创建一个XML的文档对象。  
  11.     TiXmlDocument *myDocument = new TiXmlDocument("test.xml");  
  12.     myDocument->LoadFile();  
  13.       
  14.     //获得根元素,即Persons。  
  15.     TiXmlElement *RootElement = myDocument->RootElement();  
  16.   
  17.     //输出根元素名称,即输出Persons。  
  18.     cout << RootElement->Value() << endl;  
  19.       
  20.     //获得第一个Person节点。  
  21.     TiXmlElement *FirstPerson = RootElement->FirstChildElement();  
  22.     //输出接点名Person  
  23.   
  24.     cout << FirstPerson->Value() << endl;  
  25.     //获得第一个Person的name节点和age节点和ID属性。  
  26.     TiXmlElement *NameElement = FirstPerson->FirstChildElement();  
  27.     TiXmlElement *AgeElement = NameElement->NextSiblingElement();  
  28.     TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();  
  29.       
  30.     //输出第一个Person的name内容,即周星星;age内容,即20;ID属性,即1。  
  31.     cout << NameElement->FirstChild()->Value() << endl;  
  32.     cout << AgeElement->FirstChild()->Value() << endl;  
  33.     cout << IDAttribute->Value() << endl;  
  34.   
  35.         return 0;  
  36. }  
再修改Makefile的部分代码如下:

  1. #****************************************************************************  
  2. # Targets of the build  
  3. #****************************************************************************  
  4.   
  5. OUTPUT := xmltest   
  6. LIB := libtinyxml.so  
  7. TEST:= tinyxml_test  
  8.   
  9. all: ${OUTPUT} ${LIB} ${TEST}  
  10.  
  11.  
  12. #****************************************************************************  
  13. # Source files  
  14. #****************************************************************************  
  15.   
  16. SRCS := tinyxml.cpp tinyxmlparser.cpp tinyxml_test.cpp tinyxmlerror.cpp tinystr.cpp  
然后执行make,这时,可以看到多了一个tinyxml_test 生成,执行tinyxml_test,得到如下输出结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值