我正在为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);
(我决定硬编码路径和程序用于测试目的,而不是想知道用于表示游戏名称的变量的确切值,而我正在调试它)。我自己没有填充environ变量,但是我没有看到任何这样做的例子,所以我认为它是由我链接的一个库或类似的东西完成的。这一点。
我正在以假全屏模式运行我的程序,但也尝试了真正的全屏并获得相同的结果(也就是说,我尝试了SDL_WINDOW_FULLSCREEN和SDL_WINDOW_FULLSCREEN_DESKTOP)。使用Mingw,SDL2,与Linux上相同版本的MAME和CreateProcess()命令,这个程序在Windows上运行正常。解决这个问题的任何想法?感谢。
答案 0 :(得分:0)
我把它整理好了。我评论说了 extern" C" {char ** environ;} 线,现在它的工作原理。显然,只包含unistd.h足以让environ变量正确填充(我已经将其包含在代码中),我想我注释掉的行要么与之相冲突,要么就是不能正常工作如果它与unistd.h中的任何内容都没有直接冲突。