我在我的项目中使用tinyxml库解析XML文件。当我尝试瞄准x64平台时,我得到LINKER错误,下面是其中一个:
错误4 LNK2001:未解析的外部符号"private: static "struct TiXmlString::Rep TiXmlString::nullrep_"(? nullrep_@TiXmlString@@0URep@1@A) ClassThatUsesTinyXML.obj
更新:我认为没有安装x64版本的tinyxml,但当我试图为x64平台构建库时,我得到了这个错误:
LNK1561: entry point must be defined
不是为x64 platforms
构建tinyxml,然后将tinyxml.h
和tinystr.h
添加到项目中,我只是添加了包括.cpp
文件在内的所有库文件,现在我可以针对x64平台,库实际上是在构建整个项目时构建的。
tinyxml似乎不支持开箱即用的共享库构建。
以下是我从tinyxml 2.6.2源代码构建DLL的步骤:- 在MS Visual Studio Express 2012 for Windows Desktop中打开提供的SLN文件
tinyxml.sln
。当出现提示时,选择将旧项目文件转换为新格式。 - 在"解决方案平台"中选择"配置管理器…"
- 从"Active solution platform:" select "<New…>"
- 在"Type or select new platform:"中,如果尚未选择,请选择"x64"。确保从"Win32"配置中复制设置。单击OK。单击Close退出配置管理器 在解决方案资源管理器中右键单击tinyxml项目。选择"属性"。
- 对于"配置:",选择"所有配置"。同样,对于"平台",选择"所有平台"。
- 在配置属性→常规页面中,将"配置类型"更改为"动态库(.dll)"。将"目标扩展名"更改为"。dll"。单击OK退出tinyxml Properties Pages对话框。
- 选择"Release"配置和"x64"平台
- 在解决方案资源管理器中再次右键单击tinyxml项目并选择"重建"。
在tinyxml_2_6_2tinyxmlx64Release
中,你会发现tinyxml.dll
,但没有tinyxml.lib
的导入库。这是因为没有导出任何符号。参见如何在Visual c++中构建导入库(.lib)和DLL ?
如果您想使用共享库路由,则需要通过msvc特定的__declspec(dllexport)
修饰符导出所需的符号。
当您为库的编译定义TIXML_USE_STL,而不是为链接到库的源定义TIXML_USE_STL时,会发生错误。最终的结果是,使用该库编译的代码与使用该库的源代码不同。