如何修复 C++ Builder 设计时包中 System::Set 的“未解析的外部”链接器错误?

How to fix "unresolved external" linker error for System::Set in a C++Builder design-time package?

提问人:AndyB 提问时间:7/26/2023 最后编辑:Remy LebeauAndyB 更新时间:8/1/2023 访问量:91

问:

我正在使用 C++ Builder 11.3 补丁 1。

我有一组组件,都是用 C++ 编写的,没有 Delphi 代码。这些组件分为运行时包和设计时包。运行时包生成时没有错误,但是当我尝试生成设计时包时出现此错误:

[ilink32 错误]错误:无法解析的外部“__fastcall System::Set<Designintf::TPropertyAttribute, 0, 14>::Set<Designintf::TPropertyAttribute, 0, 14>()”引用自 H:\MyComponents\WIN32\DEBUG\DESIGNTIME。OBJ的

我已遵循有关创建或扩展包以使用工具 API 的建议,并在该部分中。designide.bpirequires

我需要添加其他软件包来解决此问题吗?

链接器错误 C++Builder

评论

0赞 Remy Lebeau 7/27/2023
这很奇怪,因为是一个完全用 实现的内联类,所以不应该有任何对其方法的外部引用。System::Setsysset.h
0赞 AndyB 7/27/2023
@RemyLebeau同意了。在我工作的开发 PC 上,一切都可以正常构建。但是在我的家用电脑上,它有这个错误。我明天将比较这两种设置 - 它们应该是相同的......我猜这可能是 Embarcadero 支持的一个问题。
0赞 AndyB 7/27/2023
更正我之前的评论 - 它在我的工作 PC 上也失败了。我很少在设计时构建 BPL,因为组件很稳定......我会向内河码头提出一个案子

答:

0赞 AndyB 7/27/2023 #1

Embarcadero 报告说,这是一个已知的错误,计划在下一个主要版本中修复。

值得庆幸的是,解决方法很简单。

将此行添加到注册组件的单元中:

TPropertyAttributes foo; //or any name

它只需要是一个全局变量。