我正在努力将一些新的主干代码合并到我们的一个大型遗留项目的功能分支中。该项目使用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类似的问题?有没有办法解决或解决这个问题?