【问题标题】:Embarcadero Cbuilder [ilink32 Error] Error: Unresolved external 'System::Sysutils::Exception::{1173}...'Embarcadero Cbuilder [ilink32 错误] 错误:未解决的外部 'System::Sysutils::Exception::{1173}...'
【发布时间】:2020-08-27 09:10:00
【问题描述】:

我认为我理解“未解析的外部符号表示”的概念 - 对象都已编译,并且在链接阶段,链接器无法在任何地方找到该特定符号的定义(主体)。所以我想我要么必须以不同的方式使用符号,要么必须向项目中添加一些缺少的系统库。我不确定哪个是正确的以及如何检查(之前没有使用 RAD 的经验)。

我正在将一些旧代码(win95)转换为 win10,我在最新的 RAD Studio 10.3 下启动了一个新项目,并手动添加了所有源文件(添加到项目)。我在这里看到了一个建议,我应该确保编译器没有混合。我可以看到所有的源文件都是用 bcc32c 编译的。在文档中我可以看到 Exception 基本上只提供各种构造函数 http://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.Exception

在链接阶段我收到上面的错误 - [ilink32 Error] Error: Unresolved external 'System::Sysutils::Exception::{1173}...'

所有调用最初都是 Exception("constant") 或 Exception("constant" + AnsiStringVariable)。由于大多数问题是由旧的调用方案引起的,我尝试将其更改为 Exception(L"constant") 和 Exception(L"constant"+UnicodeString),但这显然不是问题。

感谢您的建议。

【问题讨论】:

  • 我从该项目中取出与异常相关的代码并将其放入另一个(空)项目中,并且链接没有任何问题。此外,我搜索了原始项目中异常的所有用法,但看不到任何覆盖版本或类似的东西。如何验证编译器是否设置正确,例如试图编译 c 而不是 c++ 或不同的标准?谢谢。

标签: c++ rad-studio


【解决方案1】:

很清楚这段代码:

 if(x!=S0getb()) Exception("Bad final checksum!");

产生有问题的错误。问题是缺少throw。可能它以某种方式在以前的版本中编译,没有人注意到。我猜想缺少函数符号和缺少类符号的错误代码之间存在差异。但是我没有意识到这是一个函数调用,而它应该是一个新的类实例。

正确的代码:

 if(x!=S0getb()) throw Exception("Bad final checksum!");

解决了这个问题。

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 2020-04-30
    • 2012-03-16
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多