SDL 程序无法在 Xming 上打开

SDL 程序无法在 Xming 上打开

我在 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。

因此设置如下:

  1. 下载SmarTTY 便携式

  2. 转到 \SmarttyPortable\VcXsrv 并运行 vcxsrv.exe(不要运行 xlaunch.exe)

  3. 在 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 中运行。

相关内容