大学でC言語を勉強してます。自宅でもlinuxをやろうと思い、RedHat7Jを入れることには成功しました。プログラミングの知識は少しはあるのでいざ!、あの有名なhello.cのプログラムを書いてコンパイルしました。大学のパソコンからならここでa.outと打てば「hello world!」と出るはずが
bash:a.out:command not faund
とでてしまいます。lsコマンドで見てもa.outはちゃんと存在しているんですが、、なぜこうなるのでしょうか?
どなたか回答よろしくおねがいします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

hello.cをコンパイルして作成されたa.outというファイルは通常


カレントディレクトリに作成されます。
ですが、「コマンドサーチパス」にカレントディレクトリが含まれていないため、
「a.out : commans not found」となるのです。
なので、実行する際に「./a.out」のように「./」を付けて
実行する必要があります。
この、「./」は「カレントディレクトリ上のファイル」という意味があります。

または、toysmithさんの言うとおり、set PATH=....を実行する形になるのですが、
通常UNIXを使う上での暗黙の了解として「コマンドサーチパスにカレントディレクトリ
を含めると、ウィルスなどに感染しやすくなるため、通常は記述しない」というモノが
あります。

面倒に思えるかもしれませんが、「./xxxx」の形で使用することをお薦めします。

P.S.
toysmithさんへ、
bashはrehashは不要です。
csh, tcshは必要ですが、、、
    • good
    • 0
この回答へのお礼

詳しい説明、ありがとうございます。成功しました。これを機会にc言語をもっと勉強したいとおもいます。

お礼日時:-0001/11/30 00:00

bashを想定しています。


tcshなど違うshellを使っている場合は補足してください。

./a.out
これで起動しませんか?
これがOKなら~/.longinに
set PATH="$PATH:./"
を追加してください。

bashってrehashいりました?>識者の方

この際、勉強としてbashについて勉強しましょう。
set,export,PATHなどを調べて行けばなぜそうなったかわかるはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます。[hello world]ってでました。難しそうだけどbashについても勉強していきたいと思います。

お礼日時:-0001/11/30 00:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QHello,Worldの.exeファイル

かけだしです。第一歩の「Hello,World」(単なるテキスト出力)のコンパイル後objファイルとexeファイルができますが別のPCにexeファイルをコピーして実行しても実行できません。どうすれば別のPCで実行できますか?よろしくお願いします。

Aベストアンサー

MS-DOSプロンプトを開いてそこから実行してはどうでしょうか?

もしくは
-------------------------
hello.exe
pause
--^-------------------^---
のような内容のbatファイルを作成するという手もあります。

QHello,World が出力できません。 visual C++でのC言語で

#include<stdio.h>
void main()
{
printf("Hello,World!");
}

と入力しているのですが,

LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
D:\ゲーム作り\プログラム\Hello\Debug\Hello.exe : fatal error LNK1120: 外部参照 1 が未解決です。
ビルドログは "file://d:\ゲーム作り\プログラム\Hello\Debug\BuildLog.htm" に保存されました。
Hello - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

とこんな感じでできません・・

stdioファイルはおれないのでこのファイルがあるHelloってファイルにかえたところ,

#include<Hello.h>
void main()
{
printf("Hello,World!");
}

結果
d:\ゲーム作り\プログラム\hello\hello.cpp(1) : fatal error C1083: include ファイルを開けません。'Hello.h': No such file or directory
ビルドログは "file://d:\ゲーム作り\プログラム\Hello\Debug\BuildLog.htm" に保存されました。
Hello - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

けっきょくはできないんですが,エラー1つ減ってるんで・・

http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html

こちらを参考に設定を変更してから本のプログラムをくんでいるので,若干めちゃめちゃになってるかもしれません・・・

ちなみにstdio,Helloと変更したとこをDxLibにしてもstdioのときと変わりません。あとincludのとこに何も打たないでやると
void main()
{
printf("Hello,World!");
}

結果
d:\ゲーム作り\プログラム\hello\hello.cpp(3) : error C3861: 'printf': 識別子が見つかりませんでした
ビルドログは "file://d:\ゲーム作り\プログラム\Hello\Debug\BuildLog.htm" に保存されました。
Hello - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

今度は識別子です・・

できれば本に書いてあるとおりstdioでいきたいのですが,どうしたらいいでしょうか・・

お願いします・・・

何もすることがないのでできれば早めに教えていただきたいのですが・・

#include<stdio.h>
void main()
{
printf("Hello,World!");
}

と入力しているのですが,

LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
D:\ゲーム作り\プログラム\Hello\Debug\Hello.exe : fatal error LNK1120: 外部参照 1 が未解決です。
ビルドログは "file://d:\ゲーム作り\プログラム\Hello\Debug\BuildLog.htm" に保存されました。
Hello - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不...続きを読む

Aベストアンサー

> できれば本に書いてあるとおりstdioでいきたいのですが,どうしたらいいでしょうか・・

> LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。

こうなるのは、コンソール・アプリケーションを作成しようとしているのに
コンパイル・オプションがWindowsアプリケーション用だからです。

2つ目、3つ目のソースは、間違いです。
この際捨ててしまいましょう。

Qvisual c++ 2008 にてhello worldとうちこむとすぐに消えます・・

#include<stdio.h>
void main()
{
printf("Hello,World!");
}

とうちこんでコンパイルすると
エラーなし警告なしでいけるのですが,
一瞬表示されたような気がするんですがすぐに消えるんです。
しばらく表示させるためにはどうしたらよいでしょうか。
ちなみに開くと
'hallo.exe': 'D:\ゲーム作り\プログラム\hallo\Debug\hallo.exe' を読み込みました。シンボルが読み込まれました。
'hallo.exe': 'C:\Windows\System32\ntdll.dll' を読み込みました
'hallo.exe': 'C:\Windows\System32\kernel32.dll' を読み込みました
'hallo.exe': 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll' を読み込みました
'hallo.exe': 'C:\Windows\System32\apphelp.dll' を読み込みました
スレッド 'Win32 スレッド' (0x1740) はコード 0 (0x0) で終了しました。
プログラム '[5812] hallo.exe: ネイティブ' はコード 0 (0x0) で終了しました。

とまあこんなかんじです。
どうにかならないでしょうか?

#include<stdio.h>
void main()
{
printf("Hello,World!");
}

とうちこんでコンパイルすると
エラーなし警告なしでいけるのですが,
一瞬表示されたような気がするんですがすぐに消えるんです。
しばらく表示させるためにはどうしたらよいでしょうか。
ちなみに開くと
'hallo.exe': 'D:\ゲーム作り\プログラム\hallo\Debug\hallo.exe' を読み込みました。シンボルが読み込まれました。
'hallo.exe': 'C:\Windows\System32\ntdll.dll' を読み込みました
'hallo.exe': 'C:\Windows\System32\kernel32....続きを読む

Aベストアンサー

コンソールアプリをデバッグモードで実行した場合のようですね。

コンソールアプリはWinとは違って待機しないのでプログラムとしては
最後まで実行しちゃうと自動で終了してしまいます。

ただ、IDEの方からデバッグモードやデバッグなしでの実行をすると
通常はプログラムが終了するとキー入力を促して待機してくれる
はずなのですが...。

コマンドプロンプトを開いて直接プログラムを実行すれば表示は
確認できます。

Qコンパイル ./aと./a.out の違い

ほんとにcの初心者なのですが、
今Tera Termを使って、ソースを書いて、コンパイル、実行をしているのですが、
例えばtest.cというファイルを
gcc test.c

とやってコンパイルして、
a.outというファイルができます。
それを./aとやれば実行できると聞いてやってみたのですができません。
./a.outはできるのですが

なぜなのでしょうか??

Aベストアンサー

Tera Termを使って接続している先の環境がわかりませんが、GCCは、特に出力ファイル名を指定しない限り、a.outというファイルを出力します。a.outが出力されたのですから、実行するときはその名前を指定するのが当然です。

一方、Windows上でGCCを使う場合(普通はCygwinかMinGWだと思いますが)、a.outではなくa.exeというファイルが出力されます。そのため、./aとすれば実行することができるのです。

つまり環境によって、同じGCCでもデフォルトの振る舞いが異なります。ですから、質問時には自分が使っている環境を詳しく書いてください。

Qコンパイル時に a.out と入力するとエラーが出てしまいます。

コンパイル時に a.out と入力するとエラーが出てしまいます。

テキストファイルを複数 (最大で255個) 書き込むC言語のプログラム「f.c」を作成しまして
それらのファイルは全て cygwin/home という場所に保存されます。

ただ、ファイルの中身は多くの文字が並ぶので(最大 500列 × 70000行 程度)
全てのファイルを書き込むには時間がかかりすぎてしまいます。

a.out を使って プログラム内にある

scanf("a=", &a);
scanf("b=", &b);

これらの変数 a,b を出力し
実行結果で書き込まれるファイルを
データとして出力する方法が知りたいのですが
(この方法をバッチ処理というのでしょうか?)

$ cc f.c (← 実行結果の際のコンパイル)

その次に
a.out と入力するとエラーが起きます。

a.out の使い方や意味を調べてもいまいち理解し難く困っております。

さきほど言った scanf で値を決める a,b を プログラム内で決めるのではなく
a.out a b
と入力してデータを出力させるには
どのようにすればよいのでしょうか?
なぜエラーしてしまうのかも教えて頂けないでしょうか?

長々と質問してしまいすみません。
どうか ご回答 よろしくお願いします。

コンパイル時に a.out と入力するとエラーが出てしまいます。

テキストファイルを複数 (最大で255個) 書き込むC言語のプログラム「f.c」を作成しまして
それらのファイルは全て cygwin/home という場所に保存されます。

ただ、ファイルの中身は多くの文字が並ぶので(最大 500列 × 70000行 程度)
全てのファイルを書き込むには時間がかかりすぎてしまいます。

a.out を使って プログラム内にある

scanf("a=", &a);
scanf("b=", &b);

これらの変数 a,b を出力し
実行結果で書き込まれるファイルを
データ...続きを読む

Aベストアンサー

「ファイルの中身は多くの文字が並ぶので(最大 500列 × 70000行 程度)全てのファイルを書き込むには時間がかかりすぎてしまいます。」
といったところで, 内容を全部書かないわけにはいかないよね? だとしたら, 何をどう高速化したところでそのための時間は絶対に必要.
最低限「現状どのようにしているのか」が分からなければ答えようもありません.
「a.out を使って プログラム内にある
scanf("a=", &a);
scanf("b=", &b);
これらの変数 a,b を出力し
実行結果で書き込まれるファイルを
データとして出力する方法が知りたい」
が何を言っているのかよくわからんし, そもそもこの scanf は間違ってる.


人気Q&Aランキング

おすすめ情報