【问题标题】:Tinyxml - Link errors when targeting x64 platformTinyxml - 针对 x64 平台时的链接错误
【发布时间】:2013-03-18 15:53:49
【问题描述】:

我在我的项目中使用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

【问题讨论】:

  • 请发布所有的错误。我敢打赌,顶部的某个地方是一个错误,说它找不到正确的库。安装 64 位库了吗?
  • 不,我没有^^'。我只是尝试为 x64 平台构建 tinyxml,但我做不到。这是我在构建 tinyxml 时遇到的错误:Error 1 error LNK1561: entry point must be defined path\tinyxml_2_6_2\tinyxml\LINK
  • @JoachimPileborg 请检查我的更新
  • 你到底在编译什么? dll 还是 xmltest ?以及如何?
  • 我正在尝试构建 xmltest 并以 x64 平台为目标。我已经通过将所有与 tinyxml 相关的 .h 和 .cpp 文件添加到我的项目中来解决了这个问题,现在它可以工作了,感谢@Synxis :)

标签: c++ tinyxml


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这实际上并没有使用 tinyxml 共享库——它只是一些丑陋的静态链接形式。请注意,如果您想使用新版本的 tinyxml,则需要重新编译您的应用程序(但它是否经常更改?)
    【解决方案3】:

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

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

    1. 在 MS Visual Studio Express 2012 for Windows Desktop 中打开提供的 SLN 文件 tinyxml.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)。这是因为没有导出符号。见How do I build an import library (.lib) AND a DLL in Visual C++?

    如果您想使用共享库路线,您需要通过特定于 MSVC 的 __declspec(dllexport) 修饰符导出所需的符号。见Symbol Visibility in Windows。

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 2011-06-27
      • 2020-02-04
      • 2016-09-17
      • 2011-08-23
      • 1970-01-01
      • 2012-12-30
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多