日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libxml2编译错误问题

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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编译错误问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。