8

我正在使用tinyxml库来解析项目中的 XML 文件。当我尝试以 x64 平台为目标时,我收到了 LINKER 错误,这是其中之一:

错误 4 错误 LNK2001:无法解析的外部符号“私有:静态结构 TiXmlString::Rep TiXmlString::nullrep_”(?nullrep_@TiXmlString@@0URep@1@A) ClassThatUsesTinyXML.obj

更新:我认为未安装 x64 版本的 tinyxml,但是当我尝试为 x64 平台构建库时出现此错误:

LNK1561: entry point must be defined
4

3 回答 3

6

我没有为项目构建 tinyxml x64 platforms,然后将其添加tinyxml.htinystr.h项目中,而是添加了包括文件在内的所有库文件.cpp,现在我可以针对 x64 平台,事实上,该库是在我构建整个项目时构建的。

于 2013-04-03T09:02:51.443 回答
3

看起来 tinyxml 不支持开箱即用的共享库构建。

以下是我从 tinyxml 2.6.2 源构建 DLL 的步骤:

  1. tinyxml.sln在 MS Visual Studio Express 2012 for Windows Desktop 中打开提供的 SLN 文件。提示时选择将旧项目文件转换为新格式。
  2. 从“解决方案平台”中,选择“配置管理器...”
  3. 从“活动解决方案平台:”中选择“<新建...>”
  4. 如果尚未选择,请在“键入或选择新平台:”中选择“x64”。确保从“Win32”配置中复制设置。单击确定。单击关闭退出配置管理器。
  5. 右键单击解决方案资源管理器中的 tinyxml 项目。选择“属性”。
  6. 对于“配置:”,选择“所有配置”。同样,对于“平台:”选择“所有平台”。
  7. 在配置属性 → 常规页面上,将“配置类型”更改为“动态库 (.dll)”。将“目标扩展”更改为“.dll”。单击确定退出 tinyxml 属性页对话框。
  8. 选择“发布”配置和“x64”平台。
  9. 再次右键单击解决方案资源管理器中的 tinyxml 项目,然后选择“重建”。

你会在里面tinyxml_2_6_2\tinyxml\x64\Release找到tinyxml.dll,但没有导入库 ( tinyxml.lib)。这是因为没有导出符号。请参阅如何在 Visual C++ 中构建导入库 (.lib) 和 DLL?

如果您想使用共享库路线,则需要通过特定于 MSVC 的__declspec(dllexport)修饰符导出所需的符号。请参阅Windows 中的符号可见性

于 2013-04-07T23:37:46.233 回答
2

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

于 2014-10-06T17:33:17.263 回答