【问题标题】:XE5 Ansi/Unicode-String Linker Errors (Unresolved Externals)XE5 Ansi/Unicode 字符串链接器错误(未解决的外部问题)
【发布时间】:2023-03-18 15:10:01
【问题描述】:

在 XE5 中出现以下链接器错误的多个版本。

[ilink32 Error] Error: Unresolved external '__stdcall System::UnicodeString::~UnicodeString()' referenced from <Location>

从我目前阅读的所有内容来看,我的项目设置中的包含结构似乎有问题,并且无法访问所有字符串方法的实际定义位置,但对于我的生活,我不能弄清楚这些应该在哪里。

【问题讨论】:

  • 我们很难从这里弄清楚,因为我们看不到任何代码。
  • 我没有包含代码,因为这似乎不是代码问题,除了我在代码中的某处声明了 UnicodeString。问题是(如下所述)链接器无法找到 UnicodeStrings 的构造函数的定义,它位于 RTL 库的某个位置。但即使我已经指出在库中添加了我能找到的与 RTL 和 ustring 相关的所有路径并包含路径列表,它似乎仍然找不到它们。

标签: c++ linker c++builder unicode-string ansistring


【解决方案1】:

这个问题与包含无关。包含问题只影响编译器。您的项目正在使用UnicodeString 类,因此编译器会根据ustring.h 中的声明方式生成对UnicodeString 方法的引用,这让编译器很满意。

您会收到 linker 错误,因为它无法解析编译器生成的引用。这意味着您的项目缺少对实现实际 UnicodeString 方法主体的 Embarcadero 的 RTL 库的必需引用。这可能表明您的项目一开始就被错误地创建/导入,或者已经损坏。您可能必须从头开始重新创建项目,以便使用默认库引用,并将现有代码文件重新添加到该新项目中。

【讨论】:

  • 这个项目是 CodeGear 2007 的原生项目,我正在将它移植到 XE5。我想问题是 rtl 库引用放在项目设置中的什么位置?我的想法是在包含列表中,但就像你说的那样,这是不正确的。
  • 不要在较新的 IDE 版本中打开旧 IDE 版本的现有项目,并让 IDE 为您迁移它。它很少能正常工作,并且在这样做的一个常见副作用中缺少库引用。始终在较新的 IDE 版本中创建一个新项目,然后根据需要将现有的源文件添加到其中。
  • 我目前正在权衡取舍,因为我还跨越了 2007 年和 XE5 之间发生的 Unicode 更改,因此直接导入会导致不兼容代码的大量痛苦.无论哪种方式,我都必须重新配置各种项目设置......但感谢您到目前为止的帮助!
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2020-10-15
  • 2012-03-05
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
相关资源
最近更新 更多