【问题标题】:SDL 2.0 won't initialize. Error: "Failed to connect to the Mir Server"SDL 2.0 不会初始化。错误:“无法连接到 Mir 服务器”
【发布时间】:2014-08-24 06:04:14
【问题描述】:

我正在运行 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;
}

【问题讨论】:

  • 您使用的是哪个特定版本的 SDL 2.0?

标签: sdl sdl-2


【解决方案1】:

bash$ export DISPLAY=:0

设置 DISPLAY 运行时环境变量为我解决了这个问题 - 典型的 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

【讨论】:

    【解决方案2】:

    您运行的环境是否有窗口系统?
    当我使用 Ubuntu 14.04 在 Travis CI 上运行初始化 SDL2 的测试时,出现了这个错误。根据我从进一步测试中收集到的信息和我在初始化 SDL 时从谷歌搜索中获得的提示SDL_Init,如果它通过了SDL_INIT_VIDEO(您正在使用SDL_INIT_EVERYTHING 隐式执行),它将尝试并与您机器的窗口系统连接。
    所以不妨试试:

    SDL_Init(0)
    

    然后稍后初始化其他子系统:

    SDL_InitSubSystem(SDL_INIT_EVERYTHING)
    

    如果您牢记必须退出在这种情况下初始化的每个子系统,这只是技术上的问题。你可以这样做:

    SDL_QuitSubSystem(SDL_INIT_EVERYTHING)
    

    【讨论】:

      【解决方案3】:

      我在使用 gcc 编译时遇到了这个错误。 当我使用 g++ 编译时,它解决了这个问题。 Lazy Foo tutorial也推荐你使用g++编译。

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

      【讨论】:

      • ... 更改编译器语言可以修复运行时错误?你确定吗?
      猜你喜欢
      • 2018-12-29
      • 2017-07-30
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 2012-12-29
      • 2020-07-01
      相关资源
      最近更新 更多