SDL: нет доступных видеоустройств - предварительно упакованные приложения на Devuan - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь скомпилировать 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.

1 Ответ

0 голосов
/ 20 февраля 2020

keltar обнаружил проблему в одной go: у меня была вторая локально установленная установка SDL2.

Я исправил проблему, удалив следующие файлы и каталог:

/usr/local/bin/sdl2-config
/usr/local/include/SDL2/
/usr/local/lib/libsdl*

Копии в /usr/local были созданы без поддержки графики и имели приоритет над версией менеджера пакетов, поэтому он не работал.

...