我想使用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一样。
非常感谢任何帮助!在此先感谢!!!
答案 0 :(得分:0)
你应该修改makefile并指示链接器在&#34; Darwin&#34;中使用tinyxml(-ltinyxml)。案件。 AFAIK,tinyxml不与OSX捆绑在一起,因此您可能需要查找或构建它。相反,你可以使用expat(更简单更容易)或libxml2(更快更详细),它已经附带OSX(你也可以使用(c ++)包装器,google它们......)