【发布时间】:2009-09-14 09:28:29
【问题描述】:
我从 C++ Builder 2009 的链接器收到以下错误
Unresolved external '__fastcall System::TObject::NewInstance(System::TMetaClass *)' referenced from XXX.obj?
我们有一组 Delphi 文件 (.pas) 和一组 C++ Builder 文件(.hpp 和 .obj),它们是从这些 .pas 文件生成的。
文件集被复制到另一台机器。两台机器都安装了相同的 C++ Builder 2009 版本,并安装了相同的更新(最新:3+4)。
当我在另一台机器上的 C++ Builder 中创建一个空的 VCL 应用程序并将此集合中的一个 obj 文件包含到活动项目中时,我在链接阶段收到上述错误。
这个错误的奇怪之处在于:
- 此错误不会在每台机器或 C++ Builder 安装上重现(我至少检查了其中的 5 个)。
- 如果您删除 obj 文件,而是将相应的 pas 文件添加到项目中 - 错误将消失。
- 但是如果您删除 pas 文件并再次包含 obj 文件 - 将不会出现错误。
- 在此过程中,pas 文件的任何 obj 都不会被修改。 IE。如果您从机器中删除这组文件,然后再次从第一台机器(它们的创建位置)带入它们 - 您仍然不会出错。
- 一旦您在一台特定机器上执行该序列(在项目中包含/排除 pas 文件) - 无论您多么努力(在文件夹之间移动文件、使用设置),您都无法再在该机器上收到此错误等)。实际上,我已经没有机器,我现在可以在其中重现此错误:(
我看不出,“之后”的情况与“之前”的情况(包含 pas 文件之后/之前)有何不同,因此错误仅在之前可见,之后不可见。
互联网上唯一提到此错误(或非常相似的错误)的是this。但是没有解决办法。路径中没有“+”字符,也没有空格(“”)。
我错过了什么吗?现在对我来说,它看起来像是 C++ Builder 的错误。
附:我们不能使用“仅包含 pas-file”解决方案,因为我们只需要在某些机器上部署 .hpp 和 .obj(没有 .pas 文件)。
【问题讨论】:
标签: c++ linker c++builder