2013-02-02 69 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。

相關問題