2013-02-02 2 views
1

가능한 중복 :
What is an undefined reference/unresolved external symbol error and how do I fix it?'xmlNewTextWriterFilename'에 대한 정의되지 않은 참조를 해결

나는 C에서 개발을 시작하고 간단한 XML 파일을 작성하기위한 libxml2 C-라이브러리를 사용하고자하고 .

나는이 목적을 위해 XML 파일을 작성하는 함수를 제공해야하는 별도의 소스 파일을 만들었습니다.

xmlutils.h :

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


void writeXML(const char *uri); 

xmlutils.c :

main.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... 


} 

내가이되는 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 

내가 잘못 여기서 뭐하는 거지와 414,임 컴파일? 나는 기능이있는 usr/include/libxml2/libxml/xmlwriter.h 파일을 살펴 ...

들으

답변

1

연결할 개체가 인 후 -lxml2을 잊지 마세요.

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

감사합니다. 왜 libxml2 라이브러리의 경로를 지정해야하는지 궁금합니다. #include를 통해 이미 라이브러리에 코드가 포함되어 있기 때문에 왜이 작업을 수행해야합니까? 이걸 설명해 주시겠습니까? :) – Moonlit

+0

당신은 그것의 정의를 포함하지만 컴파일 된 코드 자체는 포함하지 않습니다. 그래서 기본적으로 링커에게 어디에 포함 된 파일과 일치하는 코드를 찾을 수 있는지 알려줄 필요가 있습니다. 이렇게하면 gcc가 모든 코드를 올바르게 컴파일하고 링크 할 수 있습니다. – Fred

0

당신은 libxml을 연결하는 -l 옵션을 놓치고을합니다.

관련 문제