Tinyxml -指向x64平台时链接错误

Tinyxml - Link errors when targeting x64 platform

本文关键字:链接 错误 平台 x64 -指 Tinyxml      更新时间:2023-10-16

我在我的项目中使用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.htinystr.h添加到项目中,我只是添加了包括.cpp文件在内的所有库文件,现在我可以针对x64平台,库实际上是在构建整个项目时构建的。

tinyxml似乎不支持开箱即用的共享库构建。

以下是我从tinyxml 2.6.2源代码构建DLL的步骤:
  1. 在MS Visual Studio Express 2012 for Windows Desktop中打开提供的SLN文件tinyxml.sln。当出现提示时,选择将旧项目文件转换为新格式。
  2. 在"解决方案平台"中选择"配置管理器…"
  3. 从"Active solution platform:" select "<New…>"
  4. 在"Type or select new platform:"中,如果尚未选择,请选择"x64"。确保从"Win32"配置中复制设置。单击OK。单击Close退出配置管理器
  5. 在解决方案资源管理器中右键单击tinyxml项目。选择"属性"。
  6. 对于"配置:",选择"所有配置"。同样,对于"平台",选择"所有平台"。
  7. 在配置属性→常规页面中,将"配置类型"更改为"动态库(.dll)"。将"目标扩展名"更改为"。dll"。单击OK退出tinyxml Properties Pages对话框。
  8. 选择"Release"配置和"x64"平台
  9. 在解决方案资源管理器中再次右键单击tinyxml项目并选择"重建"。

tinyxml_2_6_2tinyxmlx64Release中,你会发现tinyxml.dll,但没有tinyxml.lib的导入库。这是因为没有导出任何符号。参见如何在Visual c++中构建导入库(.lib)和DLL ?

如果您想使用共享库路由,则需要通过msvc特定的__declspec(dllexport)修饰符导出所需的符号。

当您为库的编译定义TIXML_USE_STL,而不是为链接到库的源定义TIXML_USE_STL时,会发生错误。最终的结果是,使用该库编译的代码与使用该库的源代码不同。