Я работаю над объединением некоторого нового кода соединительной линии в функциональную ветку в одном из наших крупных устаревших проектов. Этот проект написан на 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? Есть ли способ решить или обойти эту проблему?
Задача ещё не решена.