当尝试使用libxml2编译一个简单的解析程序时,GCC会返回此错误。
/tmp/ccuq3Hc1.o: In function `main':
xmltesting.c:(.text+0x31): undefined reference to `htmlCreatePushParserCtxt'
xmltesting.c:(.text+0x50): undefined reference to `htmlCtxtReadFile'
xmltesting.c:(.text+0x64): undefined reference to `xmlDocGetRootElement'
collect2: error: ld returned 1 exit status
代码:
#include <stdio.h>
#include <libxml/HTMLparser.h>
#include <libxml/HTMLtree.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
int main()
{
htmlDocPtr doc;
htmlNodePtr org_node;
htmlNodePtr curnt_node = NULL;
htmlParserCtxtPtr parser = htmlCreatePushParserCtxt(NULL, NULL, NULL, 0, NULL, 0);
doc = htmlCtxtReadFile( parser, "html.txt", NULL, 0);
org_node = xmlDocGetRootElement( parser->myDoc );
for ( curnt_node = org_node; curnt_node; curnt_node = curnt_node->next ) {
if ( curnt_node->type == XML_TEXT_NODE ) {
printf ("%s", curnt_node->content );
}
}
}
它似乎正在读取结构,但是找不到函数?
或者我的代码有问题吗?
答案 0 :(得分:1)
您可能只需要在gcc构建行的末尾添加-lxml2
。
正如Dietricg Epp在评论中指出的那样,如果您的图书馆拥有正确的.pc
文件pkg-config
,那么这是获取必要标志的首选方式。你可以得到编译和链接标志。
$ pkg-config libxml-2.0 --cflags --libs
-I/usr/include/libxml2 -lxml2