libxml2编译错误问题
安裝環境略;
測試源碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<libxml/xmlmemory.h>
#include<libxml/parser.h>
void
parseStory(xmlDocPtr doc,xmlNodePtr cur)
{
??????? xmlChar *key;
??????? cur = cur->xmlChildrenNode;
??????? while(cur != NULL)
??????? {
??????????????? if((!xmlStrcmp(cur->name,(const xmlChar*)"keyword")))
??????????????? {
??????????????????????? key = xmlNodeListGetString(doc,cur->xmlChildrenNode,1);
??????????????????????? printf("keyword:%s\n",key);
??????????????????????? xmlFree(key);
??????????????? }
??????????????? cur = cur->next;
??????? }
??????? return;
}
static void
parseDoc(char *docname)
{
??????? xmlDocPtr doc;
??????? xmlNodePtr cur;
??????? doc = xmlParseFile(docname);
??????? if(doc == NULL)
??????? {
??????????????? fprintf(stderr,"Document not parse successfull.\n");
??????????????? return;
??????? }
??????? cur = xmlDocGetRootElement(doc);
??????? if(cur == NULL)
??????? {
??????????????? fprintf(stderr,"empty document\n");
??????????????? xmlFreeDoc(doc);
??????????????? return;
??????? }
??????? if(xmlStrcmp(cur->name,(const xmlChar*)"story"))
??????? {
??????????????? fprintf(stderr,"document of the wrong type root node != story");
??????????????? xmlFreeDoc(doc);
??????????????? return;
??????? }
??????? cur=cur->xmlChildrenNode;
??????? while(cur != NULL)
??????? {
??????????????? if((!xmlStrcmp(cur->name,(const xmlChar*)"storyinfo")))
??????????????? {
??????????????????????? parseStory(doc,cur);
??????????????? }
??????????????? cur=cur->next;
??????? }
??????? xmlFreeDoc(doc);
??????? return;
}
int
main(int argc,char **argv)
{
??????? char *docname;
??????? if(argc<=1)
??????? {
??????????????? printf("Usage:%s docname\n",argv[0]);
??????????????? return(0);
??????? }
??????? docname=argv[1];
??????? parseDoc(docname);
??????? return(1);
}
出現的錯誤:gcc test.c - o test
xml.c:4:29: error: libxml/xmlmemory.h: No such file or directory
xml.c:5:26: error: libxml/parser.h: No such file or directory
xml.c:8: error: expected ‘)’ before ‘doc’
xml.c:14:44: warning: missing terminating " character
xml.c:14: error: missing terminating " character
xml.c: In function ‘parseDoc’:
xml.c:28: error: ‘xmlDocPtr’ undeclared (first use in this function)
xml.c:28: error: (Each undeclared identifier is reported only once
xml.c:28: error: for each function it appears in.)
xml.c:28: error: expected ‘;’ before ‘doc’
xml.c:29: error: ‘xmlNodePtr’ undeclared (first use in this function)
xml.c:29: error: expected ‘;’ before ‘cur’
xml.c:30: error: ‘doc’ undeclared (first use in this function)
xml.c:36: error: ‘cur’ undeclared (first use in this function)
xml.c:43: error: expected ‘)’ before ‘xmlChar’
xml.c:52: error: ‘sur’ undeclared (first use in this function)
xml.c:52: error: expected ‘)’ before ‘xmlChar’
解決辦法:
用命令:gcc xml.c -o xml -I/usr/include/libxml2/ -lxml2可解決
解釋:
這個 -I 和 -l 的參數解釋是這樣的:
-Idir 當用#include <file> 鏈接文件的時候,gcc/g++會先在當前目錄查找你所制定的頭文件,如果沒有找到,他回到缺省的頭文件目錄找,如果使用-I制定了目錄,他會先在你所制定的目錄查找,然后再按常規的順序去找。
-llibrary 制定編譯的時候使用的庫。
例子用法: gcc -lcurses hello.c ? /* 使用ncurses庫編譯程序 */
?所以“gcc -o xml-build xml-build.c -I/usr/include/libxml2/ -lxml2”命令的意思就是“在指定目錄/usr/include/libxml2里尋找頭文件,編譯時使用的庫是xml2函數庫”
ps:
這個命令也可以成功編譯:gcc `xml2-config --cflags --libs` -o xml-create xml-create.c
轉載于:https://www.cnblogs.com/jiangyea/p/3500649.html
總結
以上是生活随笔為你收集整理的libxml2编译错误问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataTemplate——数据模板的一
- 下一篇: cocos2d-x多分辨率自适配及因此导