- ベストアンサー
Linux上で、C言語で作ったプログラムを実行させる方法
VineLinux2.1のvi:スクリーンエディタを利用して簡単なプログラムを実行させたいのですが、コンパイルしたファイルを実行すると a.out : command not found というエラーがでてきます。 実行のさせ方がおかしいのでしょうか? 今回作ったプログラムです。 #include <stdio.h> int main(){ printf("Hello World!"); return 0; }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Segmentation fault が表示されたということは実行できたということですね。 # …でも、真っ当なプログラムになってないみたいですが。 Path (←プログラムを探すディレクトリ…というと語弊があるかな?) に Current Directory (現在のディレクトリ)が含まれていないので、 Current Directory のファイルを実行する場合には、 「./」をファイル名の前に書いてやるなどの必要があるのです。 このあたりは DOS とは違います。
その他の回答 (4)
- inetd
- ベストアンサー率23% (43/184)
コンパイル後にカレントディレクトリに作られた a.out を実行する時は ./a.out でやってた方が良いと思います。PATH の設定を変えてカレントディレクトリも実行できるようにしちゃうとちょっと危なっかしいと思うので。 で、 Segmentation fault と出るというのはそのプログラムのどこかが間違っていてNULLポインターをアクセスしていたりするからだと思いますが、見た感じ間違いようがなさそうなプログラムですね・・・。よくわかりませんが、他のプログラムもそのディレクトリでコンパイルしていてその時作られた別のプログラムの a.out が残っていたりしませんか? その疑いがある場合は再度コンパイルしてから実行してみましょう。 あと、たいした問題ではありませんが、そのプログラムのままだと Hello World! の文字列出力後に改行がないので見た目が変になるかも知れません。なので printf("Hello World!\n"); にした方が良いかも(両方試してみれば違いが分かると思います。わからなかったら printf("Hello\nWorld!\n"); とかして見ましょう。\n が何かということについては入門書などを見て確認して下さい)。
お礼
>で、 Segmentation fault と出るというのはそのプログラムのどこかが間違っていてNULLポインターをアクセスしていたりするからだと思いますが、見た感じ間違いようがなさそうなプログラムですね・・・。よくわかりませんが、他のプログラムもそのディレクトリでコンパイルしていてその時作られた別のプログラムの a.out が残っていたりしませんか? その疑いがある場合は再度コンパイルしてから実行してみましょう。 すみません。確認してみるとa.outは別のプログラムでした。 あと、\nの有無の違いもちゃんと分かりました。 ありがとうございました。
- piroping
- ベストアンサー率50% (11/22)
追記です。 下記 URL を参照してください。
- n_tonbi
- ベストアンサー率75% (9/12)
ひょっとして実行許可をしてなかったりしてσ(^^) #chmod a+x a.out
お礼
回答ありがとうございます。 #chmod a+x a.out #a.out bash: a.out: command not found と、なりました。 プログラムがおかしいのでしょうか?
- piroping
- ベストアンサー率50% (11/22)
command not found なので、そのまま a.out が見つからないというエラーかと思います。 ls で見たときに a.out はできていますか? ./a.out と叩くとどうでしょうか? # Current Directory に Path が張ってない関係?
お礼
回答ありがとうございます。 ls で見たときに a.out は緑色で出てきています。 ./a.out と叩くと Segmentation fault (core dumped) と、出てきました。 # Current Directory に Path が張ってないというのは、どういうことなんでしょうか?
お礼
新しく作ったディレクトリで作業をしていたので駄目だったというわけですね。 実行できているということは、プログラムの組み方が間違っているということですね。 ありがとうございました。 プログラムをいじっていろいろ試してみます。