2015-08-20 106 views
0

我想在Borland C++ Builder 4中编译一个旧项目。我有一个可执行的exe文件和源文件,因此有人必须先设法编译它。但是,当我打开该项目,检查项目是否在资源中的所有必要文件并尝试编译它,我不断收到以下链接器错误:Borland C++ Builder 4 [链接器错误]无法解析的外部

[链接器错误]未解析的外部'_fastcall TMapperForm :: Button1Click (系统:: TObject *)'参考... \ Unit1.obj

我可以看到它无法在库中找到一个对象,但我不知道如何解决它,因为obj文件具有相同名称作为主要的cpp文件与项目的其他文件在同一个文件中,并且看起来很好。

我已经查看了这里提供的类似链接器错误的答案,但没有提供这些建议为我工作。我已经尝试了以下内容:

  • 将.obj文件添加到项目资源中。
  • 尝试手动添加编注线,例如#pragma link (Unit1.obj)
  • 确保在项目>选项>目录中选择了正确的包含和库路径。
  • 检查是否添加了所有包。

这似乎没有工作。我对C++和C++ Builder相当陌生,所以我希望这是一件小事。

有没有人看到这个特定的错误?

+1

它不是Unit1.obj它找不到,那是引用缺少方法的文件。如果我不得不猜测,我猜测源代码实际上缺少TMapperForm类中Button1Click的定义。尝试在设计器中打开表单,然后双击Button1。如果定义了一个OnClick处理程序,它会将您带到源代码中,并且您可以修复引用以指向该方法。如果它没有,则会为您创建一个Button1Click方法存根。 –

+0

@DavidDean非常感谢你。在TMapperForm类的头文件中定义了一个Button1对象,我错过了它。显然,原始开发者开始添加一个额外的按钮,但从未使用它,然后将定义留在类def中。 – laika

+0

当您保存项目(或任何文件)并且您的处理程序代码为空时,有时会发生这种情况。 BCB优化它,但有时会留下按钮处理程序调用(尤其是如果它是手动添加的)...另外,您需要小心使用rem线,因为如果您删除它们并优化没有这些功能的功能,它可以将1或两行附近的功能使得一塌糊涂... – Spektre

回答

0

该错误是由缺少处理程序或更确切地说是不包含任何内容的处理程序引起的。

虽然按钮的处理程序不包含任何内容,但TMapperForm类仍包含名为Button1的额外按钮的定义,但未使用该按钮。在TMapperForm类(在Unit1的头文件中)中注释掉方法和声明以及C++文件中的处理程序解决了该问题。

相关问题