Я получаю следующую ошибку от компоновщика C ++ Builder 2009
Unresolved external '__fastcall System::TObject::NewInstance(System::TMetaClass *)' referenced from XXX.obj?
У нас есть набор файлов Delphi (.pas
) и набор файлов C ++ Builder (.hpp
и .obj
), которые были сгенерированы из этих .pas
файлов.
Набор файлов копируется на другую машину. На обеих машинах установлена одна и та же версия C ++ Builder 2009 с одинаковыми обновлениями (последние: 3 + 4).
Когда я создаю пустое приложение VCL в C ++ Builder на другом компьютере и включаю один файл obj из этого набора в активный проект, я получаю вышеупомянутую ошибку на этапе компоновки.
Странные вещи об этой ошибке:
- Эта ошибка может быть воспроизведена не на каждой машине или установке C ++ Builder (я проверил по крайней мере 5 из них).
- Если вы удалите obj-файл и вместо этого добавите в проект соответствующий файл pas - ошибка исчезнет.
- Но если вы удалите pas-файл и снова включите obj-файл - ошибки не будет.
- Ни один из файлов obj pas не изменяется в процессе. То есть если вы удалите этот набор файлов с компьютера и снова перенесете их с первого компьютера (на котором они были созданы) - у вас все равно не возникнет ошибки.
- Как только вы выполните эту последовательность на одном конкретном компьютере (включите / исключите pas-файл из проекта) - вы больше не сможете получить эту ошибку на этом компьютере, независимо от того, как сильно вы пытаетесь (перемещать файлы между папками, играть с настройками и т. д. и т. д.). На самом деле у меня уже нет машин, где я могу воспроизвести эту ошибку прямо сейчас: (
Не вижу, чем ситуация «после» отличается от ситуации «до» (после / до включения pas-файла), поэтому ошибка видна только до, а не после.
Единственное упоминание об этой ошибке (или очень похожей ошибке) в Интернете: это . Но нет решения. В пути нет ни символов "+", ни пробелов ("").
Я что-то упустил? Сейчас мне кажется, что это ошибка C ++ Builder.
P.S. Мы не можем использовать решение «просто включить pas-файл», поскольку нам нужно развернуть только .hpp
и .obj
(без .pas
файлов) на определенных машинах.