windows和linux下tinyxml库的编译

本文介绍了如何在Linux环境下编译tinyxml动态库和静态库,以及在Windows下使用VS2010创建DLL和静态库项目,包括必要的Makefile修改和源码调整,确保XML文件以UTF-8编码保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值