2013-02-02 70 views
1

可能重复:
What is an undefined reference/unresolved external symbol error and how do I fix it?解决未定义的引用“xmlNewTextWriterFilename”

我开始用C开发并希望使用libxml2 C函数库的编写一个简单的XML文件。

为此我创建了独立的源文件,它应该提供函数来编写一个xml文件。

xmlutils.h:

#include <libxml/encoding.h> 
#include <libxml/xmlwriter.h> 


void writeXML(const char *uri); 

xmlutils.c:

#include <libxml/encoding.h> 
#include <libxml/xmlwriter.h> 

void writeXML(const char *uri){ 

int rc; 
xmlTextWriterPtr writer; 
xmlChar *tmp; 

/* Create a new XmlWriter for uri, with no compression. */ 
writer = xmlNewTextWriterFilename(uri, 0); 
if (writer == NULL) { 
    printf("testXmlwriterFilename: Error creating the xml writer\n"); 
    return; 
} 

//more code... 


} 
的main.c文件

我想要使用此功能中WriteXML:

#include<stdio.h> 
#include<string.h> 
#include "xmlutils.h" 

main() { 

writeXML("test.xml"); 
} 

林编译具有:

gcc -o myapp main.c xmlutils.c -I/usr/include/libxml2 

,我也得到:

xmlutils.c:(.text+0x19): undefined reference to `xmlNewTextWriterFilename' 
collect2: ld returned 1 exit status 

我到底做错了什么? 如果我看一看在usr/include/libxml2/libxml/xmlwriter.h文件有功能...

THX

回答

1

不要忘记选项-lxml2你想链接的对象。

gcc -o myapp main.c xmlutils.c -I/usr/include/libxml2 -lxml2 
+0

现在谢谢你的作品!我想知道为什么我必须在这里指定libxml2库的路径。为什么我必须这样做,因为我已经通过#include将代码库包含在代码中了?你能解释一下吗? :) – Moonlit

+0

你包括它的定义,但不包括编译的代码本身。所以基本上你需要告诉链接器他可以找到与你包含的文件相匹配的代码。这样gcc就能够正确地编译和链接所有的代码。 – Fred

0

你缺少-l选项链接的libxml。

相关问题