Короткая версия (я постараюсь расширить позже).
Библиотека, которую вы используете для SDF2_ttf TTF_OpenFont, требует абсолютного пути, а не относительного.Это странно, потому что почти везде, где открытое будет принимать относительный путь ("../assests/fonts/DejeVuSans.ttf") не абсолютный ("/home/me/Project/SDL2_thing/assets/fonts/DejeVuSans.ttf«).
Предполагается, что ваша программа работает в каталоге, таком как "/ home / me / Project / SDL2_thing / source / my_program".Чтобы получить родительский каталог (SDL2_thing) и построить абсолютный путь, этот фрагмент должен работать (на основе функций POSIX и немного небрежно с размерами буфера):
#include <stdio.h> //printf
#include <unistd.h> //getcwd
#include <libgen.h> //dirname
int main() {
char buffer[1024];
char target[2048];
//get the full path to the current working directory
getcwd(buffer, 1024);
printf("cwd\t: %s \n", buffer);
// This will chop off the directory at the end of the path (doing ../source) effectively)
dirname(buffer);
printf("parent\t: %s \n", buffer);
//Take the path we have ".../SDL2_thing" and build a string appending the rest
sprintf(target, "%s/assets/fonts/DejeVuSans.ttf", buffer);
printf("target\t: %s \n", target);
return 0;
}
Это полная программа, которую вы легко можете скомпилироватьи запустить, чтобы увидеть выходы промежуточного значения.Опять же, я просто подбрасываю пару больших буферов, которые неаккуратны, и их следует избегать.Используйте правильные константы MAX_PATH и тому подобное.Вы должны быть в состоянии приспособить это, чтобы получить абсолютный путь к вашему шрифту и дать TTF_OpenFont ().
Проверьте результат вызова TTF_OpenFont ().Если ноль, выведите строку, которую дает TTF_GetError ().Это должно помочь определить причину ошибки.
Если вы попробуете это решение и у вас возникнут проблемы, комментируя этот ответ.
Когда у меня появится возможность, я собираюсь выяснить, почемуФункция не принимает абсолют и, по крайней мере, пытается документировать ее как таковую, если она не исправлена.