K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1128] 電卓:コンパイル出来ません:MacOSX
投稿者:つんつん
2008/07/12 05:40:50

その4 「電卓を作ってみよう」 MacOSX で電卓使いたいとコンパイルしたのですが、エラーになります。 前橋さまの電卓試したいのですが、ご教授よろしくお願いします。 $ tar zxvf mycalc.tgz $ cd mycalc $ cd memory/ $ make cc -c -g -Wall memory.c cc -c -g -Wall storage.c ld -r -o mem.o memory.o storage.o $ cd ../debug/ $ make cc -c -g -Wall -I../ debug.c ld -r -o dbg.o debug.o $ cd .. ーーーーーーーーーーーーーーーーここまでは、エラーでませんが $ make bison --yacc -dv calc.y flex calc.l cc -c -g lex.yy.c calc.l:6:31: readline/readline.h: No such file or directory calc.l: In function `tty_input': calc.l:87: warning: assignment makes pointer from integer without a cast make: *** [lex.yy.o] Error 1 $ ーーーーーーーーーーーーーーーーここで、エラーになりました。どうして???
[この投稿を含むスレッドを表示] [この投稿を削除]
[1129] Re:電卓:コンパイル出来ません:MacOSX
投稿者:(ぱ)こと管理人
2008/07/12 13:27:01

こんにちは。 >MacOSX で電卓使いたいとコンパイルしたのですが、エラーになります。 … >cc -c -g lex.yy.c >calc.l:6:31: readline/readline.h: No such file or directory このエラーメッセージは、readline.hというファイルが見つからないと言っている わけですから、GNU readlineがインストールされていないのでしょう。 MacOSはよく知りませんが、デフォルトでは入ってなくても無理ない気がします。 実は入っていて、#includeのパスが通ってないだけかもしれませんが。 もし入っているのであれば、コンパイラの-Iオプションにそこを加えれば よいですし、入っていないのであれば拾ってきて入れることになります。 このページからダウンロードできるようです。 http://tiswww.case.edu/php/chet/readline/rltop.html インストールの方法はここにありました。 http://tiswww.case.edu/php/chet/readline/INSTALL GNUのソフトらしく、 ./configure make make install でインストールできるようです。 ただ、電卓を作るための勉強用なら、こちらの方が簡単でよいかと思います。 GNU readlineも使っていませんし。 http://kmaebashi.com/programmer/devlang/yacclex.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[1131] Re:電卓:コンパイル出来ません:MacOSX
投稿者:つんつん
2008/07/12 23:56:17

>もし入っているのであれば、コンパイラの-Iオプションにそこを加えれば >よいですし、入っていないのであれば拾ってきて入れることになります。 前橋さま ありがとうございます。 readline は、/opt/local/include/readline/ にインストールされていました。 MacOSX では、readline : いろいろなインストール方法により /opt/local や /sw/local ? や /usr/local にインストールされるみたいです。 「コンパイラの-Iオプション」に加えるということが分かりませんので readline 使っていない方のサイトで 勉強したいと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1133] Re:電卓:コンパイル出来ません:MacOSX
投稿者:(ぱ)こと管理人
2008/07/13 00:23:25

>readline は、/opt/local/include/readline/ にインストールされていました。 … >「コンパイラの-Iオプション」に加えるということが分かりませんので >readline 使っていない方のサイトで 勉強したいと思います。 了解です。 まあ一応書いておくと、今回の例ならトップディレクトリのMakefileに CFLAGS = -c -g -Wall という行がありますが(13行目)、ここに CFLAGS = -c -g -Wall -I/opt/local/include のように-Iを追加すればコンパイルは通るようになると思います。 インクルードのパスが通ってない以上、リンクのパスも通っていない可能性が ありますが、その場合は17行目の $(CC) $(OBJS) -o $@ -lreadline -lfl -lm ここに-Lオプションを加えるとかします。 詳細はこのへんを参照してください。 http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html#SEC14
[この投稿を含むスレッドを表示] [この投稿を削除]
[1134] Re:電卓:コンパイル出来ません:MacOSX
投稿者:つんつん
2008/07/13 09:55:41

前橋さま まだエラーになります。 現状:: readline.h は  /opt/local/include/readline/readline.h です。 -L も指定したつもりですが、あっているか分かりません。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー EasyPackage というパーケージ管理でreafline をインストールすると 標準 /usr/local にインストールされます。 その状態では、mycalcのコンパイル成功します。 しかし、複数のパッケージ管理を使いたくないので EasyPackage の readline は、アンインストールしました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー パッケージ管理 MacPorts で /opt/local/include/readline/readline.h に インストールした状態で、mycalcをコンパイルすることは、難しいです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1135] Re:電卓:コンパイル出来ません:MacOSX
投稿者:kit
2008/07/13 19:41:31

>現状:: >readline.h は  /opt/local/include/readline/readline.h です。 >-L も指定したつもりですが、あっているか分かりません。 まず、どういう指定をしたか、具体的に書きましょう。 エスパーじゃないんですから、「-L も指定したつもり」とだけ書かれても、 実際に何をどう指定したのか、つんつんさん以外にはさっぱり分かりません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1136] Re:電卓:コンパイル出来ません:MacOSX
投稿者:(ぱ)こと管理人
2008/07/13 20:17:03

>まず、どういう指定をしたか、具体的に書きましょう。 一般的にはそうですけど、今回について言えば、つんつんさんは >readline 使っていない方のサイトで 勉強したいと思います。 とのことなので、もうreadlineを動かしたいとは強くは思っていないように思いますし、 それなら外野がとやかく言うこともないかな、とも思いますし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1137] Re:電卓:コンパイル出来ません:MacOSX
投稿者:つんつん
2008/07/14 19:54:56

すいません 忙しく今bbsを見ました。 積極的にアプローチしてませんが、 電卓を勉強したい人が、スムーズに電卓に入っていけるようになったらなーとも思います。 >とのことなので、もうreadlineを動かしたいとは強くは思っていないように思いますし、 >それなら外野がとやかく言うこともないかな、とも思いますし。 13: CFLAGS = -c -g -Wall -I/opt/local/include 14: INCLUDES = \ 15: 16: $(TARGET):$(OBJS) 17: $(CC) $(OBJS) -o -L/opt/local/include $@ -lreadline -lfl -lm 13: と 17: を変更しました。 ./memory/ と ./debug/ で make は成功します。 mycalc/ で make すると $ make bison --yacc -dv calc.y flex calc.l cc -c -g lex.yy.c calc.l:6:31: readline/readline.h: No such file or directory calc.l: In function `tty_input': calc.l:87: warning: assignment makes pointer from integer without a cast make: *** [lex.yy.o] Error 1 $ お願いします。-Ldir の記述例もお教えください。僕の-Ldirは的を外していると思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1138] Re:電卓:コンパイル出来ません:MacOSX
投稿者:(ぱ)こと管理人
2008/07/14 23:42:14

>13: CFLAGS = -c -g -Wall -I/opt/local/include >14: INCLUDES = \ >15: >16: $(TARGET):$(OBJS) >17: $(CC) $(OBJS) -o -L/opt/local/include $@ -lreadline -lfl -lm まず、-Lの指定は間違っています。 ・-oオプションはできあがる実行形式の名前を指定するオプションですし、  makeでは、$@がターゲットの名前を指します。よって「-o $@」で組なので  その間に-Lを入れてはいけません。 ・/opt/local/includeは、その名のとおり#includeするファイルを置くところだと  思うので、ライブラリは別のところにあるはずです。  MacOSのディレクトリ構造は知りませんが、おそらく/opt/local/libあたりに、  libreadline.aとかlibreadline.soなんとかというファイルがありませんか?  だとすれば、 >17: $(CC) $(OBJS) -o $@ -L/opt/local/lib -lreadline -lfl -lm でいいと思います。 ただ、エラーメッセージが今でも >cc -c -g lex.yy.c >calc.l:6:31: readline/readline.h: No such file or directory こうだというのなら、-Iも失敗しているようです。 …そう思ってMakefileを見直して気付きました。 CFLAGSはlex.yy.cの規則のところでは使っていませんでした。すみませんこちらのミスです (_o_) 14行目の INCLUDES = \ を、 INCLUDES = -I/opt/local/include としてみてください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1139] Re:電卓:コンパイル出来ません:MacOSX
投稿者:つんつん
2008/07/15 00:00:45

前橋さま コンパイル通りました。 $ ./mycalc >9; >>9 >1+2+3+4+5+6+7+8+9+10; >>55 > mycalc も実行できます。行編集もできます。 ありがとうございます。感謝感謝!!です。 言われますように次ぎの通り修正しました。 $ cat -n Makefile <略> 14 INCLUDES = -I/opt/local/include 15 16 $(TARGET):$(OBJS) 17 $(CC) $(OBJS) -o $@ -L/opt/local/lib -lreadline -lfl -lm <略>
[この投稿を含むスレッドを表示] [この投稿を削除]