C++ 生成无效对象文件的编译器

C++ 生成无效对象文件的编译器,c++,compiler-errors,linker-errors,c++builder-5,C++,Compiler Errors,Linker Errors,C++builder 5,我正致力于将一些新的主干代码合并到我们的一个大型遗留项目的功能分支中。本项目采用C++ Builder 5编写C++语言。我们还使用TwineCompile3来加快构建时间 合并后,我现在在编译时有时会出现以下错误: [ilink32 Error] Unresolved external '__fastcall TPrintTickÜ© ::Add(int, int, int, bool, TTicketType, int, bool, bool, bool)' referenced from

我正致力于将一些新的主干代码合并到我们的一个大型遗留项目的功能分支中。本项目采用C++ Builder 5编写C++语言。我们还使用TwineCompile3来加快构建时间

合并后,我现在在编译时有时会出现以下错误:

[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。File processor.cpp在其中一个函数中包含以下代码:

PrintTicketQueue.Add(/*parameters here*/);
作为参考,processor.cpp包含的文件printTicketQueue.h具有以下代码:

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中遇到过类似的问题?有没有办法解决或解决这个问题?

听起来像TwineCompiler中的一个bug。你应该和作者谈谈。