Я пытаюсь скомпилировать SDL2-приложение "Hello here a a window", но оно не работает. Это ошибка, которую я получаю:
Could not initialize SDL: No available video device
Вот мой код:
#include <stdio.h>
#include "SDL2/SDL.h"
int greatSuccess = 1;
int main(int argc, char* argv[]) {
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) == 0) {
// this code path is not hit, omitted
} else {
printf("Could not initialize SDL: %s\n", SDL_GetError());
greatSuccess = 0;
}
return !greatSuccess ;
}
Ошибка, которая вызывает это обобщение для предварительно упакованных приложений; mgba-sdl
, интерфейс к mgba
на основе SDL2, выдает ту же ошибку:
Could not initialize video: No available video device
Я говорю то же самое, потому что No available video device
(предположительно) генерируется SDL_GetError()
в обоих случаях .
Перечисление видеоустройств из приложения приводит к:
0: dummy
Моя платформа - Devuan ASCII, основанная на Debian 9 / Stretch.
Вот вывод с ldd ./hellowindow
:
linux-vdso.so.1
libSDL2-2.0.so.0 => /usr/local/lib/libSDL2-2.0.so.0
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1
libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0
libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0
libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1
libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1
libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6
libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1
libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3
libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1
libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0
libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0
libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0
glxgears
работает. glxinfo
производит:
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Mobile Intel GM45 Express Chipset
OpenGL version string: 2.1 Mesa 13.0.6
OpenGL shading language version string: 1.20
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 13.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16
OpenGL ES profile extensions:
Некоторые вещи, которые я пробовал:
export DISPLAY=:0
(не работало, и оно уже было установлено на :0.0
) SDL_VIDEODRIVER=x11
(не сработало, и оно не работает до того, как это начинает обретать смысл, см. Перечень видеодрайверов) - компиляция с
sdl2-config --static-libs
вместо --cflags --libs
Возможно, SDL2 не поддерживает OpenGL 2.1? Что здесь происходит?
Это все довольно странно для меня, как проблема с видеодрайвером, за исключением того, что у меня работают драйверы, подтвержденные glxgears
и glxinfo
.