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
这样,动态编译的文件就能在目标板上运行了。
原文链接:https://www.f2er.com/xml/300527.html