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.exeUbuntu(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

クリックすると、addition.desktopアプリケーションの起動中にエラーが発生したことが表示されます。

また、このデスクトップファイルを/usr/share/applications

ベストアンサー1

問題の核心はコンソールアプリケーションであるプログラムを実行しようとしています。端末に接続されていません。ターミナルでは単に名前を付けてプログラムを実行できますが、GUIではコンソールアプリケーションを実行するにはターミナルウィンドウが表示されるように明示的に指定する必要があります(特にUbuntu UnityなどのGNOMEベースのデスクトップの場合)。 。

.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はシェル組み込みです。スタンドアロンプ​​ログラムではありません。たとえば、シェルを使用する場合にのみ使用できることを意味しますbash。 Cを使用している場合プログラムに遅延を追加するには、またはscanf()を正しく使用してください。getchar()これはその行に到達しないreturn 0;ことを意味します(プログラムはステートメントで終了します)、プログラムに設定された一時停止位置も無効です。system()return
  • 読むこの投稿AskUbuntuから正しいファイルを取得する例については、.desktop次のリンクを参照してください。公式文書
  • 怠惰な気がし、各実行ファイルのファイルを作成したくない場合は、.desktopさまざまなソリューションがあります。ここ。そこにスクリプトを投稿したりしました。

おすすめ記事