【问题标题】:Error Using One SDL Program To Launch Another使用一个 SDL 程序启动另一个程序时出错
【发布时间】:2018-01-02 04:54:08
【问题描述】:

我正在为 SDL2 中的游戏模拟器编写前端。当我尝试运行所选游戏时,我的程序编译并运行良好,但在 Linux (Xubuntu 16.04) 上除外。我收到一条消息“无法初始化 SDL。无法连接到 MIR 服务器。”我已经尝试过从我的程序中选择运行 MAME 模拟器,并尝试运行 Ubuntu 附带的 Mines 游戏。尝试从我的游戏启动器运行时,他们都给了我这个错误。然而,我可以从我的游戏启动器之外在同一台计算机上运行这两个,而不会出现问题。

There is an answer here 谈论设置 DISPLAY 环境变量。我的环境中已经设置了一个 DISPLAY 变量,它的值为 0.0 也许我的应用程序在显示器和/或 Mir 服务器上锁定了?如果是这样,我无法弄清楚或找出如何解决这个问题。我相信环境正在传递给已启动的程序,因为我在我的程序顶部附近有这个:

extern "C" {char **environ;}

然后调用我要启动的游戏:

 int status = posix_spawn(&pid, "/NoQuarter/emulators/mame-177/mame64.linux", NULL, NULL, argv, environ);

(我决定硬编码路径和程序以用于测试目的,而不是在调试时想知道用于表示游戏名称的变量的确切值)。我自己没有填充环境变量,但我没有看到任何这样做的示例,所以我假设它是由我链接到的库之一或类似的东西完成的。

我在假全屏模式下运行我的程序,但也尝试了真全屏并得到相同的结果(即,我尝试了 SDL_WINDOW_FULLSCREEN 和 SDL_WINDOW_FULLSCREEN_DESKTOP)。同样的程序在 Windows 上运行良好,使用 Mingw、SDL2、与我在 Linux 上使用的相同版本的 MAME 和 CreateProcess() 命令。关于解决这个问题的任何想法?谢谢。

【问题讨论】:

    标签: ubuntu sdl


    【解决方案1】:

    我把它整理好了。我注释掉了 extern "C" {char **环境;} 行,现在它可以工作了。显然,仅包含 unistd.h 就足以正确填充 environ 变量(我已经包含在代码中),我猜我注释掉的行要么与它冲突,要么即使它也不起作用与 unistd.h 中的任何内容都没有直接冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-04
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      相关资源
      最近更新 更多