我在 Windows 10 计算机上运行 Ubuntu 应用程序,但在使用 Xming 显示 SDL 程序时遇到了问题。
这是我收到的错误:
Xlib: extension "MIT-SHM" missing on display ":0".
Xlib: extension "MIT-SHM" missing on display ":0".
Xlib: extension "MIT-SHM" missing on display ":0".
以下是 SDL 代码:
/*This source code copyrighted by Lazy Foo' Productions (2004-2019)
and may not be redistributed without written permission.*/
//Using SDL and standard IO
#include <stdio.h>
#include<SDL2/SDL.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main( int argc, char* args[] ) {
//The window we'll be rendering to
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//Create window
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT,SDL_WINDOW_SHOWN );
if( window == NULL )
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//Get window surface
screenSurface = SDL_GetWindowSurface( window );
//Fill the surface white
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
//Update the surface
SDL_UpdateWindowSurface( window );
//Wait two seconds
SDL_Delay( 2000 );
}
}
//Destroy window
SDL_DestroyWindow( window );
//Quit SDL subsystems
SDL_Quit();
return 0;
}
Xming 能够很好地与 OpenGL 程序配合使用,因此我不确定需要做什么才能修复此问题。如能得到任何帮助,我将不胜感激。
答案1
当我尝试从 WSL-1(Windows 上的 Ubuntu)运行 SDL 应用程序时,我也遇到了类似的问题。我测试了几个 X 服务器,唯一能用的就是 VcXsrv,它自带智能电话版本号为 1.19.3.4。有趣的是,独立虚拟主机版本 1.20.8.1 的效果不如 XMing。
因此设置如下:
转到 \SmarttyPortable\VcXsrv 并运行 vcxsrv.exe(不要运行 xlaunch.exe)
在 Ubuntu 中运行(不确定是否需要每个命令)
export DISPLAY=:0 export LIBGL_ALWAYS_INDIRECT=1 sudo service dbus start ./your-app
PS 我尝试运行的应用程序是使用 SDL 的 Cataclysm DDA 游戏。我无法直接在 Windows 上运行它,因为 Digital Guardian (DGAgent.exe) 以某种方式阻止了它,因此游戏在启动后几秒钟内崩溃。所以我不得不使用上述解决方案在 WSL Ubuntu 中运行。