用c编写的程序在windows中双击可以运行,但在linux中却不能运行

用c编写的程序在windows中双击可以运行,但在linux中却不能运行

我在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");
}

在 Windows 中,当我双击 时,它会运行,addition.exe但在 Ubuntu(也在 CentOS 中)中,当我单击可执行文件时addition,没有任何反应。它不运行或打开终端。但是,当我./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

当我点击addition.desktop然后它说启动应用程序时发生错误。

我还尝试通过将此桌面文件复制到/usr/share/applications.

答案1

问题的核心是您正在尝试运行该程序,这是控制台应用程序,但是你没有连接终端。在终端中,您只需调用程序名称即可运行程序,但在 GUI 中,您需要明确指定应该出现一个终端窗口来运行控制台应用程序(对于基于 GNOME 的桌面尤其如此,例如 Ubuntu 的 Unity) 。

应该做的是,您还需要.desktop为您的程序创建一个包含 4 个字段的文件。这是一个例子:

[Desktop Entry]
Name=MyProg
Type=Application
Exec=/home/xieerqi/example_directory/hello_world_prog
Terminal=true

我不了解 CentOS,但就 Ubuntu 而言,要求.desktop应用程序也必须可执行如果它们位于用户主目录下的任何目录中.desktop位于其他目录中的文件,例如/usr/share/applications不需要的文件。

因此,一旦文件就位.desktop并使其可执行,您就可以运行该程序。重要的一点是Terminal=true线。这将告诉 GUI 启动终端并在那里运行您的程序。笔记:如果您的程序执行内容并立即退出,您将需要某种延迟或getchar(); 调用以保持窗口打开,因为程序退出时终端窗口将退出。这就是为什么许多用户有时会感到困惑“为什么我的程序没有运行?”它运行,实际上,它退出得太快了。


补充笔记

  • 摆脱system("read -p 'Press Enter to EXIT...' var");。该read调用是内置的 shell,并且是不是一个独立的程序,这意味着它只能在您使用 shell 时使用,例如bash.如果您使用 C,请正确使用scanf()getchar()来为您的程序添加延迟。它出现return 0;在行之后,这意味着您的system()行将不会到达(程序将在return语句处退出),因此您为程序设置的暂停位置也是无效的。
  • 这个帖子在 AskUbuntu 上获取正确文件的示例,.desktop其中包含以下链接官方文档
  • 如果您感到懒惰并且不想.desktop为每个可执行文件创建文件,那么有很多解决方案这里。我什至还在那里发布了一个脚本。

相关内容