vol*_*mot 3 gui terminal executable
我在OS,Linux(Ubuntu和CentOS)和Windows 7上用相同的源代码用C语言做了一个简单的加法程序,如下:
#include <stdio.h>
int main(){
int a,s,d;
printf("type the values u want to add and give tab between them\n");
scanf("%d %d",&a,&s);
d=a+s;
printf("addition is %d",d);
return 0;
system("read -p 'Press Enter to EXIT...' var");
}
Run Code Online (Sandbox Code Playgroud)
在 Windows 中,它在我双击时运行,addition.exe
但在 Ubuntu(也在 CentOS)中,当我单击可执行文件时addition
,什么也没有发生。它不会运行或打开终端。但是,当我输入./addition
终端时它会运行。
但我想通过双击它来运行它。我该怎么办?
该文件的属性在此图像中:
在属性的打开部分中也没有像“在终端中打开”这样的选项。
我也尝试创建.desktop
如下文件:
[Desktop Entry]
Name=addition
Type=Application
Exec=/media/smit/D/smits programs of c/projects by code blocks/02U/addition/bin/Debug/addition
Terminal=true
Run Code Online (Sandbox Code Playgroud)
当我点击addition.desktop
然后它说启动应用程序时发生错误。
我还尝试通过将此桌面文件复制到/usr/share/applications
.
问题的核心是您正在尝试运行程序,它是控制台应用程序,但您没有附加终端。在终端中,您可以通过调用程序名称来运行您的程序,但在 GUI 中,您需要明确指定应该有一个终端窗口来运行控制台应用程序(这对于基于 GNOME 的桌面尤其如此,例如 Ubuntu 的 Unity) .
应该做的是,您还需要.desktop
为您的程序创建一个包含 4 个字段的文件。下面是一个例子:
[Desktop Entry]
Name=MyProg
Type=Application
Exec=/home/xieerqi/example_directory/hello_world_prog
Terminal=true
Run Code Online (Sandbox Code Playgroud)
我不了解 CentOS,但就 Ubuntu 而言,如果.desktop
应用程序位于用户主目录下的任何目录中,则要求应用程序也必须是可执行的。.desktop
位于其他目录中的文件,例如/usr/share/applications
不需要。
因此,一旦您拥有该.desktop
文件并使其可执行,您就可以运行该程序。重要的一点是Terminal=true
线。这就是告诉 GUI 启动终端并在那里运行您的程序的原因。注意:如果您的程序执行内容并立即退出,您将需要某种延迟或getchar();
调用以保持窗口打开,因为程序退出时终端窗口将退出。这就是为什么许多用户有时会感到困惑“为什么我的程序没有运行?” 它运行,实际上,它只是退出太快了。
附加说明:
system("read -p 'Press Enter to EXIT...' var");
. 该read
调用是一个内置的外壳程序,而不是一个独立的程序,这意味着它只有在您使用外壳程序时才能使用,例如bash
. 如果您使用的是 C,请正确使用scanf()
或getchar()
为您的程序添加延迟。它出现在return 0;
line之后,这意味着system()
不会到达您的line(程序将在return
语句处退出),因此您为程序放置的暂停也是无效的。.desktop
带有官方文档链接的正确文件。.desktop
文件为每一个可执行文件,有很多的解决方案在这里。我什至在那里发布了一个脚本。