投稿先がわからなかったのでこちらに投稿させていただきます。
現在、yacc/lex プログラムジェネレータ on UNIX(TECHNOPRESS)の
書籍で勉強しているのですが、一番最初のコンパイル方法で
yacc smpint.y
lex smpint.l
cc y.tab.c -ly -ll
を行うと
/usr/bin/ld:cannot find -ly
collect2:ld returned 1 exit status
とccのコンパイルを行う時点でエラーが出てしまいます。
解決方法をご存知の方いらっしゃいましたらご教授願えないでしょうか?
よろしくおねがいします。
> 現在、yacc/lex プログラムジェネレータ on UNIX(TECHNOPRESS)の
> 書籍で勉強しているのですが、一番最初のコンパイル方法で
> yacc smpint.y
> lex smpint.l
> cc y.tab.c -ly -ll
> を行うと
> /usr/bin/ld:cannot find -ly
> collect2:ld returned 1 exit status
> とccのコンパイルを行う時点でエラーが出てしまいます。
どっちかというとリンクエラーじゃないでしょうか。
読んで字のごとく、-lyでリンクされるべきライブラリーが見つからない
のですから、それをちゃんと指定してやれば良いのでしょう。
liby.(so|a)やlibl.(so|a)のおかれているパスを-Lフラグで指定して
やれば良いです。(環境変数を設定しても良いかも)
それらのライブラリーは標準的なものなのでしょうか?(うちのには
なさそう)
--
山西 守 <ya...@biotech.okayama-u.ac.jp>
tel: 086-251-8196, fax: 086-251-8264
岡山大学工学部生物機能工学科
どんな環境のどんなccなんでしょう?
ccが-lyをファイル名だと思ってldに渡しているっぽい
ですね。そのccは引数にオプションとファイル名を混在
させられず、いちどファイル名が出てきたらそれ以降を
ファイル名の並びと解釈しているのではないでしょうか。
だとしたら
cc -ly -ll y.tab.c
で解決するかも。
--
太田純(Junn Ohta) (株)リコー/新横浜事業所
oh...@sdg.mdd.ricoh.co.jp
>> 現在、yacc/lex プログラムジェネレータ on UNIX(TECHNOPRESS)の
>> 書籍で勉強しているのですが、一番最初のコンパイル方法で
>> yacc smpint.y
>> lex smpint.l
>> cc y.tab.c -ly -ll
>> を行うと
>> /usr/bin/ld:cannot find -ly
>> collect2:ld returned 1 exit status
>> とccのコンパイルを行う時点でエラーが出てしまいます。
たんにお使いの環境では -ly は必要ない、だけでは?
% cc y.tab.c -ll
でできません?
## lex.yy.c は ... include しているのかな?
---
By よこた
VineLinux2.1.5で
%gcc -V
gcc version egcs-2.91.66 1990314/Linux(egcs-1.1.2release)
でコンパイルを行っています。
ひきつづきよろしくお願いいたします。
Linuxではliby.aが提供されていないらしく
yyerror(),main()を挿入しなければならないとのことでした。
#LinuxとUnixの開発環境はほぼ同じと勘違いしていました。
おさわがせしました。
レスをくれた方々もありがとうございました。