2014-05-18 7 views
0

tinyxml을 사용하고 싶습니다. 나는 과거에 그것을 사용했고, 그것은 훌륭하게 작동합니다. 유일한 문제는 노트북 인 리눅스 박스에서 개발하고 있다는 것이다. 나는 Mac mini를 가지고 있으며 바탕 화면으로 설정했습니다. 그래서 그것을 큰 발전을 위해 사용하고 싶습니다.링크 오류 tinyxml on OS X 10.9.2

저는 강사 중 한 명이 저에게 준 간단한 tinyxml 예제가 있습니다.

ifeq ("$(shell whoami)", "malloy") 
    CXX = clang++ 
else 
    CXX = g++ 
endif 

# Warnings frequently signal eventual errors: 
CXXFLAGS=`sdl-config --cflags` -g -W -Wall -Weffc++ -Wextra -pedantic -O0 

ifeq ("$(shell uname)", "Darwin") 
    LDFLAGS = -framework Foundation -framework GLUT -framework OpenGL -lm 
else 
    ifeq ("$(shell uname)", "Linux") 
    LDFLAGS = `sdl-config --libs` -lm -lSDL_ttf -lSDL_image -ltinyxml 
    endif 
endif 

OBJS = \ 
    main.o 
EXEC = run 

%.o: %.cpp 
    $(CXX) $(CXXFLAGS) -c $< -o [email protected] 

$(EXEC): $(OBJS) 
    $(CXX) $(CXXFLAGS) -o [email protected] $(OBJS) $(LDFLAGS) 

main.o: main.cpp 

clean: 
    rm -rf $(OBJS) 
    rm -rf $(EXEC) 

을 그리고 난이 간단한 프로젝트를 만들려고 할 때 나는이 정의되지 않은 기호 모든 오류를 얻을 :이 예제과 같이 Makefile을했다. 이 터미널 출력 내가 입력 한 후 만들 것입니다 :

g++ `sdl-config --cflags` -g -W -Wall -Weffc++ -Wextra -pedantic -O0 -o run main.o - framework Foundation -framework GLUT -framework OpenGL -lm 
Undefined symbols for architecture x86_64: 
"TiXmlString::nullrep_", referenced from: 
    TiXmlString::quit() in main.o 
"TiXmlDocument::LoadFile(TiXmlEncoding)", referenced from: 
    _main in main.o 
"TiXmlDocument::TiXmlDocument(char const*)", referenced from: 
    _main in main.o 
"TiXmlNode::Clear()", referenced from: 
    _main in main.o 
"TiXmlNode::~TiXmlNode()", referenced from: 
    TiXmlDocument::~TiXmlDocument() in main.o 
"TiXmlElement::Attribute(char const*) const", referenced from: 
    _main in main.o 
"TiXmlNode::FirstChildElement() const", referenced from: 
    TiXmlNode::FirstChildElement() in main.o 
"TiXmlNode::NextSiblingElement() const", referenced from: 
    TiXmlNode::NextSiblingElement() in main.o 
"vtable for TiXmlDocument", referenced from: 
    TiXmlDocument::~TiXmlDocument() in main.o 
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [run] Error 1 

을 내가 그것에 대해하는 링커 오류 알고있다. 나는 Homebrew를 사용하여 tinyxml을 설치했습니다. 실제로 tiny-ml에 대한 tar-ball을 얻은 후 압축을 풀고/usr/local/include에 폴더를 두었습니다. g ++는 파일 찾기에 대해 불평하지 않습니다. 그냥 v 테이블과 함께.

도움을 주시면 대단히 감사하겠습니다. 미리 감사드립니다 !!!

답변

0

"Darwin"의 경우 makefile을 수정하고 링커가 tinyxml (-ltinyxml)을 사용하도록 지시해야합니다. AFAIK, tinyxml은 OSX에 번들되어 있지 않으므로이를 찾으거나 빌드해야 할 수도 있습니다. 대신에 OSX가 이미 포함되어있는 expat (더 쉽고 간단합니다) 또는 libxml2 (더 빨리 설명 된)를 사용할 수 있습니다. (또한 C++ 래퍼, google ...)

+0

" 그것을 구축하십시오 "? 다른 뭔가를 사용할 수 있습니다 ... –