Я использую Ubuntu 22.04.4 LTS и начинаю использовать библиотеку SDL2, но по какой-то причине вызов SDL_Quit()
выдает мне ошибку сегментации. Вот минимальный объем кода, при котором возникает ошибка:
#include <SDL2/SDL.h>
int main(void)
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *screen = SDL_CreateWindow("test", 100, 100, 680, 550, 0);
SDL_DestroyWindow(screen);
SDL_Quit();
return 0;
}
Скомпилировано с использованием:
gcc test.c `sdl-config --cflags --libs` -lSDL2main -lSDL2 -Wall -pedantic -std=gnu99 -o test
Если я не звоню SDL_CreateWindow()
, то почему-то работает. Я запустил его в GDB и проследил его, кажется, ошибка произошла в функции под названием ___pthread_mutex_lock()
. Кто-нибудь знает, что здесь происходит?
Полагаю, поскольку вы компилируете для SDL2, вам следует использовать sdl2-config
вместо sdl-config
.
Для отладки попробуйте просмотреть эти теги независимо, набрав в оболочке MY_FLAGS=$(sdl2-config --cflags --libs)
, а затем echo $MY_FLAGS
. У вас должно быть что-то вроде
-I/include/path/to/SLD2 -D_REENTRANT -lSDL2
возможно, с некоторыми другими флагами.
Мне удалось без ошибок скомпилировать и запустить ваш код на Ubuntu 20.04 (он создает окно и мгновенно его закрывает).
Спасибо, да, это потому, что я использовал sdl-config вместо sdl2-config.
Я также использую Ubuntu 22.04 LTS и не могу воспроизвести вашу проблему. Программа компилируется и запускается без ошибок.