Компилятор генерирует неверный объектный файл

Я работаю над объединением некоторого нового кода соединительной линии в функциональную ветку в одном из наших крупных устаревших проектов. Этот проект написан на C ++ с использованием C ++ Builder 5.0. Мы также используем 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, проблема исчезнет.

Запуск TDump в объектном файле ‘processor.obj’ показывает, что он имеет ссылку на внешнюю функцию 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;

Чтобы еще больше сбить с толку, если я попытаюсь создать локальный указатель на TPrintTicketObject в любой Функция в processor.cpp, я получаю следующую ошибку:

[C++ Error] processor.cpp(291, 18): E2451 Undefined symbol 'TPrintTicketQueue'

Несмотря на знание, что printTicketQueue.h был включен в processor.cpp, и, следовательно, TPrintTicketQueue должен быть определен.

Я затрудняюсь объяснить, что здесь происходит. Кто-нибудь сталкивался с подобной проблемой с C ++ Builder 5.0 или TwineCompile? Есть ли способ решить или обойти эту проблему?

1

Решение

Задача ещё не решена.

Другие решения