加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Mini-XML移植到arm9开发板

发布时间:2020-12-15 23:49:16 所属栏目:百科 来源:网络整理
导读:libmxml (mini-xml) 一个轻量级的xml库,可完成读写。适合系统资源受限的嵌入式设备。 移植过程: 首先准备好交叉编译环境。 主机环境 ubuntu10.04 目标机环境 海思Hi3515开发板 linux 2.6.31 下载源码,得到mxml-1.3.tar.gz 解压,进入mxmx-1.3 ./configure

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 file
make: *** [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.a

testmxml.o:	mxml.h


#
# mxml.xml
#

mxml.xml:	mxmldoc mxml.h $(PUBLIBOBJS:.o=.c)
	$(RM) mxml.xml


valgrind:	mxmldoc
	$(RM) valgrind.xml
	valgrind --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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读