Mini-XML移植到arm9开发板

来源:互联网 发布:网络套现平台那个好 编辑:程序博客网 时间:2024/06/02 10:49

libmxml (mini-xml)
一个轻量级的xml库,可完成读写。适合系统资源受限的嵌入式设备。

移植过程:
首先准备好交叉编译环境。

主机环境
ubuntu10.04


目标机环境
海思Hi3515开发板
linux 2.6.31

下载源码,得到mxml-1.3.tar.gz
解压,进入mxmx-1.3

./configure --prefix=/var/Hi3515/Hi3515_SDK_V1.0.8.0/mpp/sample/elev/mxml-1.3/build --enable-shared CC=/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/bin/arm-hisi-linux-gcc AR=/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/bin/arm-hisi-linux-ar --host=arm-linux


接着make报错:

Testing library... ./testmxml test.xml >temp1.xml 2>temp1s.xml make: *** [testmxml] ERROR 199


 

这时不要着急,因为是交叉编译,生成的是二进制可执行文件,当然在主机上面不能执行,所以需要将Makefile中关于测试的这小段代码屏蔽掉

这时需要修改一下Makefile文件了,在修改之前,先设置一下权限,因为经过执行./configure之后Makefile变成只读的了

chmod a+rw ./Makefile


然后再打开Makefile文件进行修改,找到“testmxml: libmxml.a testmxml.o”这一行,我的Makefile是在204行,然后只保留这一行和下面一行,也就是“(CC) $(LDFLAGS) -o $@ testmxml.o libmxml.a”这一行,剩下的部分都去掉,也就是“testmxml.o: mxml.h”这一行之前的全部删除。

这时make一下,还会报错,说是

/bin/sh: ./mxmldoc: cannot execute binary filemake: *** [mxml.xml] Error 126


然后接着修改Makefile,就在刚才的那几行下面,找到“mxml.xml: mxmldoc mxml.h $(PUBLIBOBJS:.o=.c)”这一行,保留这行和下面一行即“$(RM) mxml.xml”这一行,剩下的同样都删除掉。

修改了这两处之后,就不会再报错了,我把修改后的这两部分列一下,见下面

## testmxml#testmxml:libmxml.a testmxml.o$(CC) $(LDFLAGS) -o $@ testmxml.o libmxml.atestmxml.o:mxml.h## mxml.xml#mxml.xml:mxmldoc mxml.h $(PUBLIBOBJS:.o=.c)$(RM) mxml.xmlvalgrind:mxmldoc$(RM) valgrind.xmlvalgrind --leak-check=yes ./mxmldoc valgrind.xml mxml.h \$(PUBLIBOBJS:.o=.c) >valgrind.html 2>valgrind.out


然后再重新make,发现没有报错,继续make install,然后所需要的库还有执行文件就已经被安装到你prefix指定的目录下面了,将这些复制到开发板就可以使用了。

 

下面摘一些其他博客中的说明:

对于其他版本的gcc,路径很可能不一样。在这里我们应该灵活处理。

在交叉编译链所在目录中:

1、搜索头文件最多的目录,用来存放头文件。这个目录下一般有很多子文件夹。如果不行,就在每个有头文件存放的位置都放一个mxml.h,以保证编译器能找到该文件

2、搜多存有so文件的目录(一般有多个),每个都把动态链接库和静态链接库的所有文件放进去。以保证编译器能找到。
3、相同的文件存放在多个目录,一定保证这些文件完全一致。即同一次编译的产物。

在库文件和头文件就位后,我们就可以在项目中使用libmxml了。

使用方法:

1、添加

#include <mxml.h>
 
2、增加编译参数
 
例如
 
arm-linux-gcc -o test test.c -lmxml -lpthread
 
其中-lpthread是必选参数,因为libmxml库用到了pthread库
 
在编译时,编译器会优先选择动态链接库编译,这样编译出的文件会小很多。但是同时也需要目标板上有动态链接库支持。如果想静态编译,在编译参数中加上-static

为目标机添加动态链接库
 

 
libmxml.so
 
libmxml.so.1
 
libmxml.so.1.4
 
复制到目标板的库目录,一般为/lib或/usr/lib
 


这样,动态编译的文件就能在目标板上运行了。

 

原创粉丝点击