我正在尝试编译一个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 ;
}导致这种情况的错误概括为预先打包的应用程序;mgba-sdl是基于SDL2的mgba的前端,它会产生相同的错误:
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.0glxgears确实能工作。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的视频drivers)
也许SDL2不支持OpenGL 2.1?这里发生了什么事?
这一切对我来说都很奇怪,就像视频驱动程序的问题,除了我有工作的驱动程序,得到glxgears和glxinfo的确认。
发布于 2020-02-20 15:21:53
keltar一下子发现了这个问题:我在本地安装了第二个SDL2。
我通过删除以下文件和目录解决了这个问题:
/usr/local/bin/sdl2-config
/usr/local/include/SDL2/
/usr/local/lib/libsdl*在没有图形支持的情况下构建的/usr/local中的副本优先于包管理器的版本,这就是为什么它不能工作。
https://stackoverflow.com/questions/60318688
复制相似问题