在OS X 10.9.2上链接错误tinyxml

时间:2014-05-18 22:17:30

标签: c++ osx-mavericks linker-errors tinyxml

我想使用tinyxml。我过去曾经使用它,效果很好。唯一的问题是我在我的Linux机器上开发,这是一台笔记本电脑。我有一个mac mini,我把它设置为我的桌面,所以我想用它进行大量的开发。

我有一个简单的tinyxml示例,我的一位教师给了我。通过这个例子来了一个像这样的Makefile:

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 $@

$(EXEC): $(OBJS)
    $(CXX) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS)

main.o: main.cpp

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

当我尝试制作这个简单的项目时,我得到了所有这些未定义的符号错误。 这是我输入make后的终端输出:

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。实际上它给了我一些问题,所以在我获得了tinyxml的tar-ball后,我将其解压缩并将文件夹放在/ usr / local / include中。 g ++不会抱怨找到文件。就像v-table一样。

非常感谢任何帮助!在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

你应该修改makefile并指示链接器在&#34; Darwin&#34;中使用tinyxml(-ltinyxml)。案件。 AFAIK,tinyxml不与OSX捆绑在一起,因此您可能需要查找或构建它。相反,你可以使用expat(更简单更容易)或libxml2(更快更详细),它已经附带OSX(你也可以使用(c ++)包装器,google它们......)