Opengl SDL:没有可用的视频设备-Devuan上的预打包应用程序
我正在尝试编译一个SDL2“Hello,这是一个窗口”应用程序,但它不起作用。这是我得到的错误: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
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
这对我来说很奇怪,就像一个视频驱动程序问题,除了我有可以工作的驱动程序,由
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*