免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2860 | 回复: 7
打印 上一主题 下一主题

help me about libxml2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-20 10:27 |只看该作者 |倒序浏览
undefined reference to 'xmlSaveFormatFile'
我在编译的时候出先上面的问题,请问怎么解决,还有几处警告 xmlNewTextChild
我的程序代码为:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <libxml/tree.h>  //xmlSaveFormatFile();
void parseFile(xmlDocPtr doc,xmlNodePtr cur,char *key)
{
        xmlNewTextChild(doc,NULL,"filename",key);
        return;
}
xmlDocPtr parseDoc(char *docname,char *keyword)
{
        xmlDocPtr doc;
        xmlNodePtr cur;
        doc=xmlParseFile(docname);
        if(doc==NULL)
        {
                fprintf(stderr,"Document not parse successful!\n");
                return (NULL);
        }
        cur=xmlDocGetRootElement(doc);
        if(cur==NULL)
        {        
                fprintf(stderr,"Empty Document\n");
                xmlFreeDoc(doc);
                ruturn (NULL);
        }
        if(xmlStrcmp(cur->name,(xmlChar *)"fileinfo")
        {
                fprintf(stderr,"Document Root!=fileinfo\n");
                xmlFreeDoc(doc);
                return (NULL);
        }
        cur=cur->xmlChildrenNode;
        while(cur!=NULL)
        {
                if(!xmlStrcmp(cur->name,(xmlChar *)"filename")
                {
                        parseFile(doc,cur,keyword);
                }
                cur=cur->next;
        }
        return doc;
}
int main(int argc,char *argv[])
{
        char *filename="root/TotalTime.xml";
        char key[20];
        xmlDocPtr doc;
        printf("Please input filename:\n");
        scanf("%s,",key);
        doc=parseDoc(filename,key);
        if(doc!=NULL)
        {
                xmlSaveFormatFile(filename,doc,0);
                xmlFreeDoc(doc);
        }
        return (1);
}


count.c: 在函数 ‘parseFile’ 中:
count.c:8: 警告:passing argument 1 of ‘xmlNewTextChild’ from incompatible pointer type
count.c:8: 警告:传递参数 3 (属于 ‘xmlNewTextChild’) 给指针时目标与指针有/无符号不一致
count.c:8: 警告:传递参数 4 (属于 ‘xmlNewTextChild’) 给指针时目标与指针有/无符号不一致
/tmp/cck82zbd.o(.text+0x1b5): In function `main':
count.c: undefined reference to `xmlSaveFormatFile'
collect2: ld 返回 1

论坛徽章:
0
2 [报告]
发表于 2007-03-20 16:05 |只看该作者
偌大的一个论坛.................
等了我一天了,也没人帮忙???
哎....冷...........................

论坛徽章:
0
3 [报告]
发表于 2007-03-20 22:30 |只看该作者
警告是说你传递的参数类型不匹配。
undefined reference to 'xmlSaveFormatFile' ?
是因为没有链接libxml2的库,
编译程序的时候加上  -L/usr/lib -lxml2,

论坛徽章:
0
4 [报告]
发表于 2007-03-20 22:39 |只看该作者
看看xmlSaveFormatFile是否在另外的命名空间中??

论坛徽章:
0
5 [报告]
发表于 2007-03-21 14:28 |只看该作者
谢谢各位!现在运行的时候,出现段错误,不知原因在哪?? 编译已通过
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
void parseFile(xmlNodePtr cur,char *key)
{
        xmlNewTextChild(cur,NULL,"filename",key);
        return;
}
xmlDocPtr parseDoc(char *docname,char *keyword)
{
        xmlDocPtr doc;
        xmlNodePtr cur;
        doc=xmlParseFile(docname);
        if(doc==NULL)
        {
                fprintf(stderr,"Document not parse successful!\n");
                return (NULL);
        }
        cur=xmlDocGetRootElement(doc);
        if(cur==NULL)
        {       
                fprintf(stderr,"Empty Document\n");
                xmlFreeDoc(doc);
                ruturn (NULL);
        }
        if(xmlStrcmp(cur->name,(xmlChar *)"fileinfo")
        {
                fprintf(stderr,"Document Root!=fileinfo\n");
                xmlFreeDoc(doc);
                return (NULL);
        }
        cur=cur->xmlChildrenNode;
        while(cur!=NULL)
        {
                if(!xmlStrcmp(cur->name,(xmlChar *)"filename")
                {
                        parseFile(cur,keyword);
                }
                cur=cur->next;
        }
        return doc;
}
int main(int argc,char *argv[])
{
        char *filename="root/TotalTime.xml";
        char key[20];
        xmlDocPtr doc;
        printf("Please input filename:\n");
        scanf("%s,",key);
        doc=parseDoc(filename,key);
        if(doc!=NULL)
        {
                xmlSaveFormatFile(filename,doc,1);
                xmlFreeDoc(doc);
        }
        return (1);
}

root/TotalTime.xml

<?xml version="1.0" encoding="UTF-8"?>
<fileinfo>
<filename>test.flv</filename>
<filetotaltime>0.00</filetotaltime>
</fileinfo>

论坛徽章:
0
6 [报告]
发表于 2007-03-21 15:41 |只看该作者
我也在学xml,刚开始学,不知道你的
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
在那里阿,我的怎么没有啊/
还有怎么用c语言读、写和修改xml文件阿?
谢谢了。

论坛徽章:
0
7 [报告]
发表于 2007-03-26 11:07 |只看该作者
段错误是fprintf引起的,貌似不能直接将字符串输入到文件
需要使用fprintf(stream, const char *format,...)

论坛徽章:
0
8 [报告]
发表于 2007-03-30 14:59 |只看该作者
看看xmlSaveFormatFile是否在另外的命名空间中??
怎么看它所在命名空间???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP