您的位置:首页 > 运维架构 > Linux

libmxml (Mini-XML) arm-linux 移植笔记

2017-08-25 14:54 966 查看
1、创建一个文件夹,用来存放库文件及测试代码

# mkdir mxml

2、到官方网站http://www.minixml.org/software.php下载libmxml库文件,并将其解压到该目录下。我所使用的是2.10的版本,解压后目录为mxml-2.10。

# cd mxml

# tar -xzvf mxml-2.10.tar.gz

3、编译mxml库

# cd mxml-2.10

# ./configure --host=arm-linux

make编译后会出现一个小错误。不用理会

/bin/sh: ./testmxml: cannot execute binary file: 可执行文件格式错误
Makefile:352: recipe for target 'testmxml' failed
make: *** [testmxml] Error 126
编译完生成以下几个重要的文件

mxml.h 头文件

libmxml.a 静态链接库文件

libmxml.so 动态链接库的链接文件,链接到libmxml.so.1.4

libmxml.so.1 动态链接库的链接文件,链接到libmxml.so.1.4

libmxml.so.1.4 动态链接库本体

4、创建一个test文件夹,存放info.xml及编写的测试代码

# cd ..

# mkdir test

# cd test

info.xml信息如下:

<?xml version="1.0"?>
<node>
<music>
<state stat="China">
<url>http://www.baidu.com</url>
</state>
</music>
<search>
<state stat="China">
<url>http://www.baidu.com</url>
</state>
<state stat="USA">
<url>http://www.google.com</url>
</state>
</search>
</node>


test.c编写如下:

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include"mxml.h"

int main(int argc,char **argv)
{
int i;
FILE *fp;
mxml_node_t *tree,*node,*search;
mxml_node_t *state,*url;

fp = fopen("info.xml", "r");
if(fp == NULL)
{
printf("open the info.xml error!\n");
return -1;
}
tree = mxmlLoadFile(NULL, fp,MXML_TEXT_CALLBACK);
fclose(fp);
if(tree == NULL)
{
printf("Load file error!\n");
return -1;
}

node = mxmlFindElement(tree, tree, "node",NULL, NULL,MXML_DESCEND);
if(node == NULL)
{
printf("can not find element node!\n");
return -1;
}

search = mxmlFindElement(node, tree,"search",NULL, NULL,MXML_DESCEND);
if(search == NULL)
{
printf("can not find element search!\n");
return -1;
}

for(state = mxmlFindElement(search, tree, "state","stat", NULL,MXML_DESCEND);
state != NULL;
state = mxmlFindElement(state, tree, "state","stat", NULL,MXML_DESCEND))
{
for(i=0;i<state->value.element.num_attrs;i++)
{
if(memcmp(state->value.element.attrs[i].name,"stat",strlen("stat")) == 0)
{
printf("value:%s\n",state->value.element.attrs[i].value);
url = mxmlFindElement(state, tree, "url",NULL, NULL,MXML_DESCEND);
printf("url:%s\n",mxmlGetText(url,NULL));
}
}
}

mxmlDelete(tree);
printf("success!\n");

return 0;
}


5、编译我们写的测试代码 (mxml-2.10目录与test目录在同一级目录下)

# arm-linux-gcc test.c -o test -static -I ../mxml-2.10 -L ../mxml-2.10 -lmxml -lpthread 

其中-lpthread是必选参数,因为libmxml库用到了pthread库在编译时,编译器会优先选择动态链接库编译,这样编译出的文件会小很多。但是同时也需要目标板上有动态链接库支持。如果想静态编译,在编译参数中加上-static

6、拷贝生成的test执行文件到arm开发板中

7、运行测试

# ./test

测试结果如下:

value:China

url:http://www.baidu.com

value:USA

url:http://www.google.com

success!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: