Eclipse 3.5 Galileo + CDT + cygwinで、CやC++のプログラムを作りたいと考えています。
しかし、ビルドが通らず、困っています。
行った作業手順は、以下の通りです。
(1)まず、下記サイトを参考に、簡単なCプログラムを作りました。
http://www.c.csce.kyushu-u.ac.jp/~seiichirou/wik …
----以下、作成したプログラム----
/* hello.c */
#include <stdio.h>
void edajima(void);
int main(int argc, char* argv[]) {
edajima();
return 0;
}
/* edajima.c */
#include <stdio.h>
void edajima(void);
void edajima(void) {
printf("わしが男塾塾長 江田島平八である!!\r\n");
}
----プログラムここまで----
(2)そして、Makefileを以下のように作成しました。
----以下、Makefile----
# Makefile
CC = gcc
CXXFLAGS =-O2 -g -Wall -fmessage-length=0
OBJS =edajima.o hello.o
LIBS =
TARGET =hello.exe
$(TARGET):$(OBJS)
$(CC) -o $(TARGET) $(OBJS) $(LIBS)
all:$(TARGET)
hello.o: hello.c
$(CC) -c hello.c
edajima.o: edajima.c
$(CC) -c edajima.c
clean:
rm -f $(OBJS) $(TARGET)
----Makefileここまで----
(3)次に、EclipseでCのMakefileプロジェクトの作成をしました。
ロケーションは、上記ソースやMakefileがあるディレクトリを指定しました。
(4)Eclipseのプロジェクトエクスプローラで、Makefileを右クリックし、[Makeターゲット]-[作成]
でMakeターゲットを作成しました。
(5)Makefileを右クリックし、[Makeターゲット]-[ビルド]を実行すると、下記エラーが出て、
ビルドに失敗しました。
make hello
gcc -c hello.c
gcc hello.o -o hello
hello.o:hello.c:(.text+0x17): undefined reference to `_edajima'
collect2: ld returned 1 exit status
make: *** [hello] Error 1
どうやら、edajima.cがコンパイルされていない様です。
cygwin上でmakeコマンドを実行すると、ビルドできるので、Makefileは間違っていないと思っているのですが・・・。
どなたか、分かる方、ご教授願います。
No.2ベストアンサー
- 回答日時:
手前でも、試してみました。
手前では、特に問題なく、ビルドも実行も出来ましたが、
ビルド時のメッセージに違いがあるみたいです。
make all
gcc -c edajima.c
gcc -c hello.c
gcc -o hello.exe edajima.o hello.o
と言う風なビルド時のメッセージでした。
ので、もしかすると、
> (4)Eclipseのプロジェクトエクスプローラで、Makefileを右クリックし、[Makeターゲット]-[作成]
> でMakeターゲットを作成しました。
作成するべきMakeターゲットは「all」であるはずなんですが、
「hello」とかを作っちゃったのではないですか?
ありがとうございます。
その通りでした。helloをターゲットにしていました。
allにしたら、コンパイルは通ったのですが、
「必要なプロジェクトにエラーがあります。起動しますか?」と聞かれ、
「はい」を押すと、無事に実行されるみたですが、「問題」のビューに
「make; ***No rule to make target `all'」と表示されます。
何ででしょう?
No.3
- 回答日時:
> 「make; ***No rule to make target `all'」と表示されます。
> 何ででしょう?
make ターゲット「all」のルールが無いと言っているみたいです。
Makefile を編集したんじゃないですか?
この回答への補足
ありがとうございます。
Makefileは、変更していないんですよね・・・・。
一旦、cleanを実行して、allを実行すると、エラーが無く、コンパイルは通るんです。
all実行時のコンソールの内容は、下記のようになります。
----------------------------
make all
g++ -c edajima.c
g++ -c hello.c
g++ -o hello.exe edajima.o hello.o
----------------------------
その後、Eclipseの実行を押すと、
「必要なプロジェクトにエラーがあります。起動しますか?」と表示されます。
この時のコンソールの内容は、下記のようになります。
----------------------------
make all
make: *** No rule to make target `all'. Stop.
----------------------------
なぜか、実行時に再度make allされて、失敗している様です。
[プロジェクト]-[自動的にビルド]のチェックは外しているんですが・・・。
すいません、自己解決しました。
プロジェクトのプロパティーの[C/C++ビルド]-[ビルダー設定]でビルド・ディレクトリーをMakefileがある場所に設定したら、エラーが出なくなりました。
ありがとうございました。
No.1
- 回答日時:
hello.cにある
> void edajima(void);
を
extern void edajima(void);
に変えてみてください。
同じファイルの中に無いものはexternで外部参照を宣言しておく必要があります。
この回答への補足
ありがとうございます。
extern void edajima(void);
に変えましたが、結果は同じでした。
gcc -c hello.c
の後に
gcc hello.o -o hello
となってしまい、
gcc -c edajima.c
の処理が走らないのは、なぜでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- Ruby プログラミング 3 2023/06/09 14:30
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# Makefileのechoの展開について 2 2022/07/26 07:35
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Java マイクラでPythonのプログラミングができません 3 2023/05/28 07:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- CM ANAのCMのナレーションがどなたなのか知りたいです。 1 2023/01/18 16:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
既定のコンストラクタがありま...
-
int main()、void main()、void...
-
戻り値を返す関数の前に(void)...
-
C# KeyDownイベントでショート...
-
C# Controls.Addで動的に配置し...
-
多重定義が起きている?--lnk20...
-
stddef.hって何?
-
VC++でGetKeyboardStateがうま...
-
Notepad++の関数リスト表示の変...
-
関数の戻り値がextern
-
C++でイベントドリブンなコード...
-
C++にてtemplateで受け取った任...
-
メッセージマップ(ON_CONTROL_...
-
マルチメディアタイマーの使用方法
-
クラス間でのクラスの共有?
-
string型とsbyte*型の変換
-
SC_SIZEがわからない
-
ArduinoでMouse関数を使用して...
-
void*型の配列について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Notepad++の関数リスト表示の変...
-
ArduinoでMouse関数を使用して...
-
【gcc・cygwin】multiple defin...
-
戻り値を返す関数の前に(void)...
-
多重定義が起きている?--lnk20...
-
C++にてtemplateで受け取った任...
-
既定のコンストラクタがありま...
-
静的でないメンバ関数の呼び出...
-
gcc: incompatible pointer type
-
C# Controls.Addで動的に配置し...
-
int main()、void main()、void...
-
(void)0 はどんな意味ですか
-
VC++でGetKeyboardStateがうま...
-
void*型の配列について
-
C# KeyDownイベントでショート...
-
const_castのつかいどころを教...
-
H8マイコンのシリアル通信につ...
-
コールバックって・・・
-
関数ポインタについて
-
void main()って誰が最初?:AN...
おすすめ情報