使用一个SDL程序启动另一个程序时出错

问题描述 投票:0回答:1

我正在为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上运行正常。解决这个问题的任何想法?谢谢。

ubuntu sdl
1个回答
0
投票

我把它弄清楚了。我评论了extern“C”{char ** environ;}行,现在它可以工作了。显然,只包括unistd.h就足以让environ变量正确填充(我已经在代码中包含了这个变量),我想我注释掉的行要么与它发生冲突,要么即使它不起作用也行不通与unistd.h中的任何内容都没有直接冲突。

© www.soinside.com 2019 - 2024. All rights reserved.