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");
}
Windowsではaddition.exe
をダブルクリックすると実行されますが、Ubuntuでは(CentOSでも)実行可能ファイルaddition
をクリックしても何も起こりません。端末を実行したり開いたりすることはありません。ただし、ターミナルで./addition
と入力すると実行されます。
しかし、私はそれをダブルクリックして実行したいと思います。私は何をすべきか?
そのファイルのプロパティはこの画像にあります:
また、プロパティのopen withセクションに「open in terminal」のようなオプションはありません。
次のような.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
にコピーして開こうとしました。
問題の核心は、コンソールアプリケーションであるプログラムを実行しようとしているが、端末が接続されていないことです。ターミナルでは、プログラム名を呼び出すだけでプログラムを実行できますが、GUIでは、コンソールアプリを実行するためにターミナルウィンドウを表示する必要があることを明示的に指定する必要があります(これは、UbuntuのUnityなどのGNOMEベースのデスクトップに特に当てはまります) 。
実行する必要があるのは、4つのフィールドを持つプログラム用の_.desktop
_ファイルも作成する必要があるということです。次に例を示します。
_[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
ステートメントで終了します)。したがって、プログラムの一時停止の配置も無効です。.desktop
_ファイルの例については、AskUbuntuで この投稿 を読んでください。.desktop
_ファイルを作成したくない場合は、解決策がたくさんあります here 。そこにもスクリプトを投稿しました。