Opengl SDL:没有可用的视频设备-Devuan上的预打包应用程序

Opengl SDL:没有可用的视频设备-Devuan上的预打包应用程序,opengl,debian,driver,sdl,Opengl,Debian,Driver,Sdl,我正在尝试编译一个SDL2“Hello,这是一个窗口”应用程序,但它不起作用。这是我得到的错误: 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 | SD

我正在尝试编译一个SDL2“Hello,这是一个窗口”应用程序,但它不起作用。这是我得到的错误:

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 ;
}
我也这么说,因为在这两种情况下,
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:
我尝试过的一些事情:

  • 导出显示=:0
    (不起作用,并且已设置为
    :0.0
  • SDL\u VIDEODRIVER=x11
    (不起作用,并且在开始有意义之前失败,请参阅视频驱动程序的枚举)
  • 使用
    sdl2 config--static libs
    而不是
    --cflags--libs
也许SDL2不支持OpenGL2.1?这是怎么回事


这对我来说很奇怪,就像一个视频驱动程序问题,除了我有可以工作的驱动程序,由
glxgears
glxinfo

keltar一次就发现了这个问题:我在本地安装了第二个SDL2

我通过删除以下文件和目录修复了此问题:

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

/usr/local
中的副本是在没有图形支持的情况下生成的,并且优先于package manager的版本,这就是为什么它不起作用的原因。

您的SDL2安装来自哪里
/usr/local/lib/libSDL2-2.0。那么.0
是您列表中唯一的
local
库吗?它是定制的吗?如果是这样,您的SDL2是在没有任何视频实现的情况下构建的。它来自Devuan预构建包repo,我自己还没有构建它。@keltar谢谢,就这样!原来我有两个安装,我忘了几周前我从源代码构建了它。
/usr/local/bin/sdl2-config
/usr/local/include/SDL2/
/usr/local/lib/libsdl*