我正在将一些新的主干代码合并到我们的一个大型遗留项目的功能分支中。该项目是使用 C++Builder 5.0 用 C++ 编写的。我们还使用 TwineCompile 3 来加快我们的构建时间。
合并后,现在编译时有时会出现以下错误:
[ilink32 Error] Unresolved external '__fastcall TPrintTickܩ ::Add(int, int, int, bool, TTicketType, int, bool, bool, bool)' referenced from C:\PROJECTS\PRODUCT\V3.12.X\SOURCE\OBJ\PROCESSOR.OBJ
只有在关闭编译器优化的情况下进行发布构建时才会出现此错误(这是我们通常发布代码的方式)。如果我重新启用编译器优化,或者如果我进行调试构建,则不会出现错误。此外,如果我禁用 TwineCompile,问题就会消失。
在“processor.obj”对象文件上运行 TDump 表明它引用了外部函数 TPrintTickÜ© ::Add。这个函数实际上应该是 TPrintTicketQueue::Add。文件 processor.cpp 在其中一个函数中包含以下代码:
PrintTicketQueue.Add(/*parameters here*/);
作为参考,文件 printTicketQueue.h(包含在 processor.cpp 中)具有以下代码:
class TPrintTicketQueue
{
public:
/* Some more code here */
void __fastcall Add(int jobID, int ticketID, int numID, bool labelPrint, TTicketType type, int count = 1, bool remote = false, bool print = true, bool printLabelOnly = false);
};
extern TPrintTicketQueue PrintTicketQueue;
为了进一步混淆问题,如果我尝试在 processor.cpp 中的任何函数中创建指向 TPrintTicketObject 的本地指针,我会收到以下错误:
[C++ Error] processor.cpp(291, 18): E2451 Undefined symbol 'TPrintTicketQueue'
尽管知道 printTicketQueue.h 已包含在 processor.cpp 中,因此应该定义 TPrintTicketQueue。
我无法解释这里发生了什么。有没有人在使用 C++Builder 5.0 或 TwineCompile 时遇到过类似的问题?有没有办法解决或解决这个问题?