在嵌入式系统中,minixml解析器最为常用。目前官网发布的开源版本为2.7.(参见官网::http://www.minixml.org 跳转:http://www.msweet.org/projects.php?Z3 下载源码)
以下根据实验过程总结其移植过程。
解析器的移植,首先要明确,是通过交叉编译得到编译源码包时产生的必需文件,包括:libmxm.a libmxml.so libmxml.so.1 libmxml.so.1.5
1)解压源码包:
tar -xvzf mxml-2.7.tar.gz
2)进入解压后的文件mxml-2.7,执行:
./configure
3)编译
>>如果需要将解析器安装到PC的linux系统上,可以再执行
make
make install
此时查看目录/usr/local/lib,具有以下文件:
这表示解析器在PC上安装成功。但是,尚不能成功使用。详情见后述。
注:如果执行make后出现以下错误:
/bin/ln: creating symbolic link`libmxml.so': Operation not supported
可能你使用的是虚拟机VM,而源码包放在与windows平台共享的文件夹中。解决办法是将源码包拷贝进linux系统目录内
>>如果仅是移植,则进入目录mxml-2.7后需要执行:
./configure--enable-shared --host=arm-linux
make
此时会在源码包下生成libmxm.a libmxml.so libmxml.so.1 libmxml.so.1.5文件
4)在PC的linux系统中拷贝必要文件
>>拷贝mxml.h 到交叉编译器(arm-linux-gcc)所安装目录的/include目录下,
如:cp mxml.h /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include
>>拷贝libmxml.a libmxml.so libmxml.so.1 libmxml.so.1.5到交叉编译器的/lib目录下
如我的目录为:/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib
6)在ARM的linux系统中拷贝必要文件
进入开发板linux系统中,将在PC上生成的libmxm.a libmxml.so libmxml.so.1 libmxml.so.1.5拷贝到开发板linux系统根目录下的/lib目录下。
至此,移植过程全部完成。
【测试】
(1)测试移植到ARM上的解析器
>>在PC机上,进入源码包,编译其中提供的供测试用的文件:
arm-linux-gcc testmxml.c -o mytestxmlonARM -lmxml -lpthread
>>将生成的mytestxml文件拷贝到ARM上,然后执行:
./mytestxmlonARM
如果在终端上显示出一个xml文档内容,则表示移植成功!
(2)测试PC的linux系统的解析器
>>进入源码包,执行:gcc testxml.c -o mytestxmlonPC -lmxml -lpthread
>>执行./mytestxmlonPC
此时,会显示错误:error while loading shared libraries: libmxml.so.1: cannot open sharedobject
这是由于共享库文件安装到了/usr/local/lib中,程序按照默认共享路径找不到该共享文件。因此,需要将目录/usr/local/lib加到系统共享库配置文件/etc/ld.so.conf中
#cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
#include “/usr/local/lib” >> /etc/ld.so.conf
#ldconfig
注:ldconfig命令的用途:在默认搜索目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如:lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.
然后,再执行:./mytestxmlonPC
同样,如果终端上显示一个xml文档的具体内容,则表示解析器安装成功。
注意:
1)在编译的时候,记得在加上后缀:-lmxml -lpthread
2)应用程序中,需要包括mxml.h,即#include <mxml.h>