一、Linux下编译tinyxml动态库
下载tinyxml源码,然后对MakeFile进行修改,修改如下:
DEBUG := NO #根据需要,如果需要调试信息,修改为YES
OUTPUT := libtinyxml.so #生成的动态库文件名
SRCS := tinyxml.cpp tinyxmlparser.cpp tinyxmlerror.cpp tinystr.cpp#删除xmltest.cpp,移除源文件后需要将中间文件生成的指令也同步移除,在最后结尾部分删除xmltest.o的生成
DEBUG_CFLAGS := -Wall -Wno-format -g -DDEBUG -fPIC#添加-fPIC
${OUTPUT}: ${OBJS}
${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} -fPIC -shared#添加-fPIC -shared,表示生成位置无关代码以及生成动态库
执行make完成编译
二、Linux下编译tinyxml静态库
修改Makefile如下,然后进行make完成编译。
DEBUG := NO #根据需要,如果需要调试信息,修改为YES
OUTPUT := libtinyxml.a #生成的动态库文件名
SRCS := tinyxml.cpp tinyxmlparser.cpp tinyxmlerror.cpp tinystr.cpp#删除xmltest.cpp,移除源文件后需要将中间文件生成的指令也同步移除,在最后结尾部分删除xmltest.o的生成
DEBUG_CFLAGS := -Wall -Wno-format -g -DDEBUG
${OUTPUT}: ${OBJS}
${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} -static#添加-static,表示生成静态库
三、windows下编译生成动态库
官网下载的Tinyxml只支持静态库生成,若需要生成动态库,需要进行修改。
打开VS2010 -> 新建win32项目 -> 下一步 -> 勾选"DLL” -> 完成,将tinyxml文件夹下所有的.h/.cpp文件复制到改工程目录下。
打开tinyxml.h头文件,定义以下宏
#define TIXML_USE_STL//使用STL
#define TIXML_DLL//DLL项目
#define TIXML_DLL_EXPORT//DLL导出
#ifdef TIXML_DLL
#ifdef TIXML_DLL_EXPORT
#define TIXML_DLL_API _declspec(dllexport)
#else
#define TIXML_DLL_API _declspec(dllimport)
#endif
#else
#define TIXML_DLL_API
#endif
在所有需要导出类前面加上TIXML_DLL_API宏
class TIXML_DLL_API TiXmlVisitor
{
};
class TIXML_DLL_API TiXmlNode : public TiXmlBase
{
};
class TIXML_DLL_API TiXmlAttribute : public TiXmlBase
{
};
class TIXML_DLL_API TiXmlAttributeSet
{
};
class TIXML_DLL_API TiXmlElement : public TiXmlNode
{
};
class TIXML_DLL_API TiXmlComment : public TiXmlNode
{
};
class TIXML_DLL_API TiXmlText : public TiXmlNode
{
};
class TIXML_DLL_API TiXmlDeclaration : public TiXmlNode
{
};
class TIXML_DLL_API TiXmlUnknown : public TiXmlNode
{
};
class TIXML_DLL_API TiXmlDocument : public TiXmlNode
{
};
class TIXML_DLL_API TiXmlHandle
{
};
class TIXML_DLL_API TiXmlPrinter : public TiXmlVisitor
{
};
为了在保存xml文件的时候为UTF-8编码,在TiXmlDocument类的三个构造函数中设置useMicrosoftBOM=true
TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )
{
tabsize = 4;
useMicrosoftBOM = true;//保存为UTF-8格式
ClearError();
}
TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )
{
tabsize = 4;
useMicrosoftBOM = true;//保存为UTF-8格式
value = documentName;
ClearError();
}
#ifdef TIXML_USE_STL
TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )
{
tabsize = 4;
useMicrosoftBOM = true;//保存为UTF-8格式
value = documentName;
ClearError();
}
#endif
编译生成Debug和Release即可。
四、windows下编译生成静态库
从官网下载tinyxml直接进行编译即可生成静态lib