C言語でコンパイルができなくて困っています。
コンパイルをすると、
-----------------------------------------
test.c.20:undefined reference to `getcury'
test.c:20: undefined reference to `getcurx'
collect2: ld returned 1 exit status
-----------------------------------------
と言うエラーが出てしまい、コンパイルが完了しません。
ソースは、「test.c」と言うファイルネームで、内容は
-----------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
int main (void)
{
int y = 0, x = 0;
initscr();
getyx(curscr, y, x);
printw("x = %d, y = %d", x, y);
refresh();
getchar();
endwin();
return 0;
}
-----------------------------------------
です。
OSは、Windows7 Professional SP1
コンパイラーは、MinGW Ver5.1.6. で、コマンドは gcc -o test.exe test.c -lcurses です。
確かに、curses へはパスも通っており、リンクできているようなんですが、
エラーが出てしまいます。
どうすれば良いのかわからず、大変困っています。
だれかご存知の方、教えてください。
どうかよろしくお願い致します。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
> おっしゃられる通り、MinGWをインストールしただけではcursesは入らなかったので、UNIX の curses.h を持って来たり、pdcurses-2.6-bin を入れたり、pdc34dllw を入れたりで、ヘッダとライブラリがめちゃくちゃになっている気がします。
素性がはっきりしていて、かつMinGWに適合するバイナリが入手できたのであればよいのですが、そうでなければうまくいかなくて当然です。
自分でcursesをコンパイルした方が、遠回りなようでも結局早かったりしませんか?
私はMinGWの環境でcursesを使ったことはないので、そもそもちゃんとコンパイルできて動作するのかどうかは知りませんが...
No.6
- 回答日時:
MinGWをインストールしただけではcursesは入らないはずです。
cursesはどんな素性のものを入手したのでしょうか?
その辺りに問題の原因がありませんか?
ありがとうございます。
おっしゃられる通り、MinGWをインストールしただけではcursesは入らなかったので、UNIX の curses.h を持って来たり、pdcurses-2.6-bin を入れたり、pdc34dllw を入れたりで、ヘッダとライブラリがめちゃくちゃになっている気がします。
すべて消して一からやり直してみます。
No.4
- 回答日時:
>それと、めちゃくちゃにインストールしたためか、curses.h がいくつもありどれを使えば良いかわからない状態です。
(念の為すべて試してみましたが…)>
>何かヘッダファイル以外に、「.a」や「.dll」など必要なファイルがあるのでしょうか?
>具体的に何をどうすればよいのやら、さっぱりわからず、立ち往生です。
>何か他に心当たりがあるようでしたら、教えていただけないでしょうか。
#2の方はその心当たりをすでに書かれてると思いますが。
要は、ヘッダファイルとリンクしているライブラリの組み合わせがかみ合ってないんだから、ヘッダファイルとリンクするライブラリの組み合わせを適切にしてください。って事です。
ヘッダファイルとリンクするライブラリの適切な組み合わせは、さすがにめちゃめちゃな状態といわれている以上アドバイスできる人はいないでしょうからご自分で調べるしかないと思います。
またヘッダファイルにあるのは基本的に関数の宣言であって、関数の本体はライブラリ(*.aや*.dll)にありますからヘッダファイルだけあってもリンクや実行時にエラーになります。
あと大抵のヘッダファイルは自分が必要とするヘッダファイルは自分でインクルードするように書かれてる事が多いので前もってインクルードしておかなければならないということはあまりないです。
ありがとうございます。大変参考になります。
getyxを使用するには、curses.hがあれば良いと思いますので、一先ずヘッダーは置いといて、もう一度 curses のライブラリを見直ししてみます。
No.3
- 回答日時:
> 「The inclusion of <curses.h> may make visible all symbols from the headers <stdio.h>, <term.h>, <termios.h> and <wchar.h>. 」って書いてある。
「curses.h を #include すると<stdio.h>などモロモロに定義されたシンボルも見えちゃうかも」と言うてるのだから、
他のヘッダが暗黙裡に #include されるんでしょう。だから
> curses.hをインクルードするには「その前にインクルードしておく必要のあるヘッダ」がいっぱいある。
コレは違うんじゃないかしら?
No.2
- 回答日時:
ヘッダやライブラリが複数あったりすると「どれを #include してどれをリンクするのか」で混乱する可能性が考えられるのですが, その辺は大丈夫でしょうか? つまり, 例えば
・#include しているヘッダでは getyx が getcurx や getcury を使う
・リンクしているライブラリは (対応するヘッダが使うことを想定していないので) getcurx や getcury を提供していない
というようなことになってると, 明らかに破たんしますよね.
この回答への補足
ご回答ありがとうございます。
確かに curses.h では、 getyx が getcurx や getcury を使うようになっています。
それと、めちゃくちゃにインストールしたためか、curses.h がいくつもありどれを使えば良いかわからない状態です。(念の為すべて試してみましたが…)
何かヘッダファイル以外に、「.a」や「.dll」など必要なファイルがあるのでしょうか?
具体的に何をどうすればよいのやら、さっぱりわからず、立ち往生です。
何か他に心当たりがあるようでしたら、教えていただけないでしょうか。
よろしくお願い致します。
No.1
- 回答日時:
に「The inclusion of <curses.h> may make visible all symbols from the headers <stdio.h>, <term.h>, <termios.h> and <wchar.h>. 」って書いてある。
curses.hをインクルードするには「その前にインクルードしておく必要のあるヘッダ」がいっぱいある。
少なくとも、stdio.hとstdlib.hだけじゃ「何もしてないのと一緒」だから、絶対にコンパイルできない。
んで「前提となるヘッダ」もインクルードすると「そのヘッダをインクルードする為に、事前にインクルードしておくヘッダ」が雪ダルマ式に増えていって収集が付かなくなるから、覚悟しておくように。
経験から、コンパイルが通るようになるだけで2日は必要。さらに、リンクが通るようになるにはもう2日かかると思う。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
1 つ以上の複数回定義されてい...
-
” OS ビルド ” の意味が分か...
-
<math.h>があるのにsqrtが・...
-
「fatal error C1189」を回避す...
-
必要なDBG ファイルが見つから...
-
Makefile作成時の拡張子.oとは?
-
動的な変数名のつけ方について
-
Microsoft の Visual C++ サン...
-
外部シンボル "_main"は未解決です
-
クリティカルエラー Expressio...
-
2G以上のファイル操作
-
Borland C Builder とOpenCVを...
-
C++/CLIで、アンマネージC++のD...
-
アプリケーションの配布
-
VC60とVC70の違いは?
-
VMwareのLinuxでコンパイルでき...
-
複数のサブディレクトリを一緒...
-
コンパイルエラー
-
NOTIFYICONDATAについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
C++コンパイル時に『 C1083: in...
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
ビルドとリビルドの違いを教え...
-
RPGでプログラムからソースファ...
-
戻り値について
-
C++のhppファイルをCでinclude
おすすめ情報