Raspberry Pi 4 上的 SDL2:SDL 初始化失败没有可用的视频设备
SDL2 on Raspberry Pi 4: SDL Initialization failed No available video device
我在获取一个使用 SDL 编译的程序时遇到问题,因此为了修复它我重新安装了 SDL2 和 SDL2Image link:
https://solarianprogrammer.com/2015/01/22/raspberry-pi-raspbian-getting-started-sdl-2/
我以前用过这个 link 并成功创建了 windows 和渲染器。
现在程序编译并运行了,但我得到了错误
SDL Initialization failed no available video device
初始化SDL时。
我不确定使用的是什么视频系统,因为配置命令禁用了 mir wayland x11 和 opengl。该教程说了一些关于强制 opengl es 的内容。
对于 SDL2:
我下载 tar 文件并将其解压缩到我的主目录中,然后使用此命令进行配置:
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
输出为:
SDL2 Configure Summary:
Building Shared Libraries
Building Static Libraries
Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly
Assembly Math :
Audio drivers : disk dummy oss alsa(dynamic) sndio
Video drivers : dummy opengl_es1 opengl_es2
Input drivers : linuxev linuxkd
Using libudev : YES
Using dbus : YES
然后我使用:make -j 4
然后:sudo make install
对于 SDL2_Image:
我配置的是:../configure,没有总结
然后: make -j 4
然后:sudo make install
我刚刚尝试了教程 link 给出的测试程序,它执行并正确显示图像,这里是初始化代码:
int main(int argc, char** argv) {
// Initialize SDL
check_error_sdl(SDL_Init(SDL_INIT_VIDEO) != 0, "Unable to initialize SDL");
// Create and initialize a 800x600 window
SDL_Window* window = SDL_CreateWindow("Test SDL 2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
check_error_sdl(window == nullptr, "Unable to create window");
// Create and initialize a hardware accelerated renderer that will be refreshed in sync with your monitor (at approx. 60 Hz)
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
check_error_sdl(renderer == nullptr, "Unable to create a renderer");
// Set the default renderer color to corn blue
SDL_SetRenderDrawColor(renderer, 100, 149, 237, 255);
// Initialize SDL_img
int flags=IMG_INIT_JPG | IMG_INIT_PNG;
int initted = IMG_Init(flags);
check_error_sdl_img((initted & flags) != flags, "Unable to initialize SDL_image");
我将该代码完全复制到我的代码中,但我不再获得 SDL Init。失败但我收到这些错误:
Unable to initialize SDL_image Invalid renderer
Unable to create texture Invalid renderer
Unable to create texture Invalid renderer
Unable to create texture Invalid renderer
这是该测试文件的一对一副本,所以我不确定会发生什么。有什么建议吗?
更新:
重新编译测试程序后,它也不再工作,并给出 SDL Init failed 错误。我用这一行编译:
g++ -std=c++0x -Wall -pedantic sdl2_test.cpp -o sdl2_test `sdl2-config --cflags --libs` -lSDL2_image
我重新配置并安装了,而不是配置:
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
我只是做了:
../configure
不确定这是否会在以后引入其他问题,但目前可以捕获图像显示和键盘输入。
我在获取一个使用 SDL 编译的程序时遇到问题,因此为了修复它我重新安装了 SDL2 和 SDL2Image link: https://solarianprogrammer.com/2015/01/22/raspberry-pi-raspbian-getting-started-sdl-2/ 我以前用过这个 link 并成功创建了 windows 和渲染器。 现在程序编译并运行了,但我得到了错误
SDL Initialization failed no available video device
初始化SDL时。
我不确定使用的是什么视频系统,因为配置命令禁用了 mir wayland x11 和 opengl。该教程说了一些关于强制 opengl es 的内容。
对于 SDL2:
我下载 tar 文件并将其解压缩到我的主目录中,然后使用此命令进行配置:
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
输出为:
SDL2 Configure Summary:
Building Shared Libraries
Building Static Libraries
Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly
Assembly Math :
Audio drivers : disk dummy oss alsa(dynamic) sndio
Video drivers : dummy opengl_es1 opengl_es2
Input drivers : linuxev linuxkd
Using libudev : YES
Using dbus : YES
然后我使用:make -j 4
然后:sudo make install
对于 SDL2_Image:
我配置的是:../configure,没有总结
然后: make -j 4
然后:sudo make install
我刚刚尝试了教程 link 给出的测试程序,它执行并正确显示图像,这里是初始化代码:
int main(int argc, char** argv) {
// Initialize SDL
check_error_sdl(SDL_Init(SDL_INIT_VIDEO) != 0, "Unable to initialize SDL");
// Create and initialize a 800x600 window
SDL_Window* window = SDL_CreateWindow("Test SDL 2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
check_error_sdl(window == nullptr, "Unable to create window");
// Create and initialize a hardware accelerated renderer that will be refreshed in sync with your monitor (at approx. 60 Hz)
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
check_error_sdl(renderer == nullptr, "Unable to create a renderer");
// Set the default renderer color to corn blue
SDL_SetRenderDrawColor(renderer, 100, 149, 237, 255);
// Initialize SDL_img
int flags=IMG_INIT_JPG | IMG_INIT_PNG;
int initted = IMG_Init(flags);
check_error_sdl_img((initted & flags) != flags, "Unable to initialize SDL_image");
我将该代码完全复制到我的代码中,但我不再获得 SDL Init。失败但我收到这些错误:
Unable to initialize SDL_image Invalid renderer
Unable to create texture Invalid renderer
Unable to create texture Invalid renderer
Unable to create texture Invalid renderer
这是该测试文件的一对一副本,所以我不确定会发生什么。有什么建议吗?
更新:
重新编译测试程序后,它也不再工作,并给出 SDL Init failed 错误。我用这一行编译:
g++ -std=c++0x -Wall -pedantic sdl2_test.cpp -o sdl2_test `sdl2-config --cflags --libs` -lSDL2_image
我重新配置并安装了,而不是配置:
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
我只是做了:
../configure
不确定这是否会在以后引入其他问题,但目前可以捕获图像显示和键盘输入。