У меня установлены MSYS2 и MinGW64. Я также установил Code :: Blocks и указал его конфигурацию набора инструментов на исполняемые файлы в бине MinGW64. Для поддержания чистоты я установил только библиотеки, использующие pacman из оболочки MinGW64.
$ pacman -Sl | grep SDL2
mingw32 mingw-w64-i686-SDL2 2.0.9-1
mingw32 mingw-w64-i686-SDL2_gfx 1.0.4-1
mingw32 mingw-w64-i686-SDL2_image 2.0.4-1
mingw32 mingw-w64-i686-SDL2_mixer 2.0.4-1
mingw32 mingw-w64-i686-SDL2_net 2.0.1-1
mingw32 mingw-w64-i686-SDL2_ttf 2.0.14-1
mingw64 mingw-w64-x86_64-SDL2 2.0.9-1 [installed]
mingw64 mingw-w64-x86_64-SDL2_gfx 1.0.4-1 [installed]
mingw64 mingw-w64-x86_64-SDL2_image 2.0.4-1 [installed]
mingw64 mingw-w64-x86_64-SDL2_mixer 2.0.4-1 [installed]
mingw64 mingw-w64-x86_64-SDL2_net 2.0.1-1 [installed]
mingw64 mingw-w64-x86_64-SDL2_ttf 2.0.14-1 [installed]
Используя Code :: Blocks, я могу скомпилировать и связать пример, который инициализирует SDL2, открывает окно и выходит из события SDL_Quit. В примере проекта НЕТ дополнительной конфигурации компилятора или компоновщика. На самом деле, глобальные настройки Code :: Blocks также не настраивают поисковые каталоги. Я полагаю, что в GCC есть INCLUDE и LIB уже установлены в среде по умолчанию.
Проблема возникает, когда я пытаюсь использовать SDL2_ttf. Я могу включить это, и Code :: Blocks находит это достаточно хорошо, чтобы предложить некоторое завершение кода. Но сборка не удалась по "неопределенной ссылке на TTF_Init".
-------------- Build: Debug in TV Tennis (compiler: GNU GCC Compiler)---------------
g++.exe -LD:\msys64\mingw64\lib -o "bin\Debug\TV Tennis.exe" obj\Debug\main.o -lmingw32 -lSDL2main -lSDL2.dll -luser32 -lgdi32 -lwinmm -ldxguid
obj\Debug\main.o: In function `SDL_main':
H:/Datacenter/Source/TVTennis/C++/TV Tennis/main.cpp:45: undefined reference to `TTF_Init'
H:/Datacenter/Source/TVTennis/C++/TV Tennis/main.cpp:59: undefined reference to `TTF_OpenFont'
H:/Datacenter/Source/TVTennis/C++/TV Tennis/main.cpp:109: undefined reference to `TTF_CloseFont'
H:/Datacenter/Source/TVTennis/C++/TV Tennis/main.cpp:110: undefined reference to `TTF_Quit'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
5 error(s), 0 warning(s) (0 minute(s), 0 second(s))
Если я добавлю «-lSDL2_ttf» к параметрам компоновщика проекта, проблема исчезнет.
У меня вопрос: почему я получаю магию автоматического связывания для SDL2, а не для SDL2_ttf?