SDL 2.0初始化失败。错误信息为:“无法连接到Mir服务器”。

3
我正在运行Ubuntu 14.04,并使用Eclipse CDT。
在我的程序中,我试图初始化SDL,如果它不能初始化,则输出错误,但是SDL_GetError()返回“无法连接到Mir服务器”的错误信息。我确定SDL已经正确安装,因为我可以在另一个项目上成功地初始化SDL。
这些是我正在使用的库:http://i.imgur.com/SS1mjzQ.png
#include <SDL2/SDL.h>
#include <iostream>

int main(int argc, char* args[]) {
  if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    std::cout << SDL_GetError() << std::endl;
  }

  return 0;
}

1
你使用的是哪个具体版本的SDL 2.0? - TPS
3个回答

1

bash$ export DISPLAY=:0

将DISPLAY运行时环境变量设置为:0,可以解决这个问题——这是典型的X Windows错误,它不能默认使用本地显示(设计用于远程显示),你只有在参加过X11夏令营后才会知道。

以下是一个完整的bash工作示例:

(cd /tmp && g++ -xc++ - -lSDL2 && (DISPLAY=:0 ./a.out; echo \$? = $?)) <<.
#include <SDL2/SDL.h>
#include <iostream>

int main() {
  if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    std::cout << SDL_GetError() << std::endl;
    return 1;
  }
  return 0;
}
.

$? = 0


0

在使用gcc编译时,我遇到了这个错误。 当我使用g++进行编译时,问题得到了解决。Lazy Foo tutorial也建议您使用g++进行编译。

如果您遇到此问题,可以尝试使用g++进行编译,看看是否解决了问题。


更改编译器语言可以解决运行时错误吗?你确定吗? - Ignacio Vazquez-Abrams

0

您正在运行的环境是否具有窗口系统?
当我在Travis CI上使用Ubuntu 14.04运行测试并初始化SDL2时,出现了这个错误。根据我从进一步测试和谷歌搜索中获得的提示,如果在初始化SDL时传递了SDL_INIT_VIDEO(您使用SDL_INIT_EVERYTHING隐式传递),它将尝试连接您计算机的窗口系统。
因此,也许可以尝试:

SDL_Init(0)

然后使用以下代码初始化其他子系统:

SDL_InitSubSystem(SDL_INIT_EVERYTHING)

如果您这样做,请记住您必须退出您在此情况下初始化的每个子系统,这只是技术上的。您可以像这样执行:

SDL_QuitSubSystem(SDL_INIT_EVERYTHING)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接