我用 C 语言制作了一个小型贪吃蛇游戏。当我通过 GUI(Nemo)打开它时,没有任何内容被打开。但如果我使用终端打开它,它就会按预期工作。我已经在具有不同操作系统(Ubuntu、Mint 等)的多台计算机上进行了尝试,但都出现了相同的问题。
我还尝试右键单击该文件,选择“使用其他应用程序打开”,然后在“输入要执行的自定义命令”文本框中键入以下内容:
gnome-terminal --working-directory ~/Downloads/My\ Programs/Snake -e "/bin/bash -c './Snake && read'"
然后尝试打开可执行文件。然而,什么也没发生。
但使用终端执行相同的命令效果很好。为可执行文件设置的权限Snake
为-rwxr-xr-x
,其类型为Program (application/x-executable)
。另外,file
给出:
$ file Snake
Snake: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=c609e53bda05544c647aab2a19aa865af6dc93c2, not stripped
可能是什么问题呢?
答案1
这与将 Nemo 浏览到 /usr/bin 并单击 时得到的结果相同bash
。正确的?
您可以将要运行的 shell 命令(调用 gnome-terminal)放在外壳脚本。
(没有什么特定于它是一个 shell 脚本。您也可以像这样编写代码isatty(STDERR) || execlp("gnome-terminal", "--working-directory", ...);
)。
GUI 和终端应用程序之间没有更标准的桥梁。如果您想将其打包为 GUI 应用程序,则必须构建自己的 GUI 包装器。没有办法运行通用终端模拟器。
从文件浏览器运行可执行文件并不被普遍认为是一个好主意。 (Gnome 文件不再是了)。您的文件浏览器可能也可能不支持运行.desktop
文件(即不将它们安装到桌面应用程序菜单/启动器)。这些都不利于安全,例如,如果可移动设备上的可执行文件可以将自定义图标设置为看起来像 Word 文档。