Неразрешенные внешние файлы .obj, касающиеся деструкторов классов библиотеки FreeType T :: ~ T - PullRequest
0 голосов
/ 25 февраля 2011

После более или менее удачного решения этой проблемы: Как обновить проект Borland 6 C ++ с включения indy.bpi в indy60.bpi?

... IТеперь столкнемся с другой трудностью: у меня теперь есть «неразрешенные внешние» деструкторы в файлах .obj: я уже видел эту ошибку раньше: похоже, речь идет о виртуальных деструкторах, которые должны быть реализованы ни с чем: T :: ~ T () {} ;(или = null;)

Проблема в том, что соответствующие деструкторы находятся в библиотеке FreeType.Поэтому я полагаю, что он хорошо написан и не хочет модифицировать свои деструкторы ...

=> Кто-нибудь знает о проблемах с неразрешенным внешним деструктором в файлах .obj при компиляции библиотеки FreeType?

1 Ответ

0 голосов
/ 25 февраля 2011

Я еще не работал с FreeType, но я думаю, деструкторы определены непосредственно внутри объявления класса.Это означает, что они неявно объявлены как встроенные.В зависимости от вашего компилятора это предотвратит включение деструкторов с внешней связью в любой из сгенерированных файлов библиотеки.

Что теперь делать:

  • проверьте,пропустили любую из необходимых библиотек для FreeType.В Unix-подобных ОС вы можете проверить с помощью nm, включен ли код деструкторов в файл библиотеки, с помощью команды «nm» (см. Справочную страницу).

  • Проверьте FreeTypeдокументация, если это известная проблема или существует более новая версия

  • Измените заголовочные файлы, содержащие эти классы, сделайте деструкторы не встроенными и перенесите их определения в отдельный файл:

    класс A {... virtual ~ A () {}}

становится

class A {
  ...
  virtual ~A();
}

и в отдельном файле укажите это:

A::~A() {}
...