Контекст
Я делаю игровой движок, используя SDL и OpenGL. Я пытаюсь найти лучший способ вывода текста на экран с причудливым шрифтом True Type, и я наткнулся на FTGL. (Если у вас есть лучшее / простое решение, не стесняйтесь поделиться им.)
Компиляция FTGL
Для работы требуется FreeType2, поэтому я его получил, скомпилировал (используя Code :: Block), а затем скомпилировал библиотеку FTGL, используя Code :: Block.
Я использую Eclipse Indigo с плагином CDT. Я не уверен, какую библиотеку взять, так как есть файлы .lib
и .dll
. Я пробовал оба, но это, похоже, не меняет мою проблему, которая в данный момент находится в этой строке:
FTfont* m_Font = new FTTextureFont(filename.c_str());
Ошибка:
The type 'FTTextureFont' must implement the inherited pure virtual method 'FTFont::MakeGlyph'
Это не изменится, если я использую другой подкласс FTfont, например Конструктор FTPixmapFont.
Вот флаги компоновщика, которые я пробовал:
-lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_net -lSDL_ttf -lftgl -lfreetype234_D -lopengl32 -lglu32
-lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_net -lSDL_ttf -lftgl -llibfreetype -lopengl32 -lglu32
Я использую затмение с MinGW.
Я скопировал и вставил
- папка
src/FTGL
и
- содержимое папки
Include
библиотеки freetype
в папку include
каталога MinGW.
Оба файла freetype2 (есть freetype.lib
, freetype248_D.lib
и freetype-bcc.lib
, которые не обязательно связаны в свойствах проекта) и ftgl (ftgl.dll
, ftgl_D.lib
, ftgl_static_D.lib
) lib файлы в соответствующая папка lib каталога MinGW.
Если я нажму на строку с ошибкой и использую опцию Открытое объявление, eclipse приведет меня к заголовочному файлу FTTextureFont
, в котором определено FTTextureFont(char const*)
и определена функция MakeGlyph
.
Полный код можно найти на странице проекта GetRandomGame , если вы хотите увидеть больше, или в качестве справки.
Вот версия компилятора
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.1/configure --enable-languages=c,c++,fortran,objc,ob
j-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp -
-disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runti
me-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.6.1 (GCC)
EDIT
Подобный вопрос: FTGL неопределенные ссылки всегда были? , но ответ на этот вопрос не решает мою проблему, я все еще получаю эти две ошибки.
РЕДАКТИРОВАТЬ 2
Я компилировал с использованием MSVC, когда я впервые попытался использовать FTGL, и у меня было две ошибки.
Наконец, я использовал code :: block для импорта проекта MSVC, поставляемого с обеими библиотеками. Одна из двух ошибок была решена! Но я все еще получил это:
The type 'FTTextureFont' must implement the inherited pure virtual method 'FTFont::MakeGlyph'
РЕДАКТИРОВАТЬ 3
Я пытался скомпилировать FTGL 2.1.2 с помощью freetype 2.3.4, и это не решило мою проблему. Я пробовал FTGL 2.1.3 RC5 с freetype 2.3.4, тоже самое. Просто чтобы быть уверенным, я также пробовал freetype 2.3.5 и 2.4.8 (первый раз уже был 2.4.8).
Я пытался переместить код MakeGlyph
в заголовочный файл, но это не решило проблему.
Вот несколько полезных ссылок, которые я нашел, но они еще не решили проблему.
РЕДАКТИРОВАТЬ 4
Когда я убираю флаг компоновщика ftgl
, компилятор жалуется на это:
undefined reference to FTPixmapFont::FTPixmapFont(char const*)'
collect2: ld returned 1 exit status
Build error occurred, build is stopped
И я все еще получаю чисто виртуальный метод MakeGlyph
Ошибка.
С флагом компоновщика ftgl
единственная ошибка, которую я получаю, это "должен реализовать унаследованный метод Pure Virtual MakeGlyph" . Компилятор строит проект нормально (но вылетает при запуске):
-lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_net -lSDL_ttf -lfreetype -lftgl -lopengl32 -lglu32
Build complete for project GetRandomGame
Так что я думаю, что библиотека FTGL не скомпилирована правильно, поскольку в ней должен быть FTPixmapFont.cpp
, определяющий чисто виртуальный метод MakeGlyph
. Я в новинку со всеми этими библиотеками в c ++ и, возможно, я делаю что-то не так, собирая библиотеку.
РЕДАКТИРОВАТЬ 5
Я прочитал и увидел в примере, что мне нужен файл config.h
, поэтому я добавил правильно настроенный файл config.h
, который поставляется с FTGL.
Затем я нашел следующий код в примере, предоставленном в каталоге ftgl
, и добавил его в свой класс Font
.
class FTHaloFont : public FTFont
{
public:
FTHaloFont(char const *fontFilePath) : FTFont(fontFilePath) {}
protected:
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot)
{
return new FTHaloGlyph(slot);
}
};
Даже если я определю MakeGlyph
там, Eclipse жалуется на неосуществленный чисто виртуальный метод FTFont::MakeGlyph
.
РЕДАКТИРОВАТЬ 6
Я попытался отладить из командной строки с помощью gdb, и он говорит мне, что freetype6.dll не может быть найден.Я сейчас пытаюсь найти решение.