2012-11-10 5 views
8

このエラーは死に至ったことは知っていますが、動作させることはできません。私は、このような「gensineを作る」私は次のような結果に返されていますようにコマンドを実行すると-lmメイクファイルに数学ライブラリをリンクしていません

all: gensine info cs229towav 

encode.o: encode.h encode.c 
    gcc -c encode.c 

write.o: write.c write.h 
    gcc -c write.c 

gensine.o: encode.c gensine.h gensine.c helper.c write.c 
    gcc -c gensine.c -lm 

helper.o: helper.c helper.h 
    gcc -c helper.c 

read.o: read.h read.c 
    gcc -c read.c 

info.o:read.c info.h info.c decode.c 
    gcc -c info.c 

decode.o: decode.c decode.h helper.c 
    gcc -c decode.c 

cs229towav.o: write.c read.c cs229towav.c cs229towav.h helper.c decode.c encode.c 
    gcc -c cs229towav.c -lm 

gensine: encode.o gensine.o write.o helper.o 
    gcc -o gensine encode.o gensine.o write.o helper.o -lm 

info: read.o info.o decode.o helper.o 
    gcc read.o info.o decode.o helper.o 

cs229towav: write.o read.o cs229towav.o decode.o encode.o helper.o 
    gcc -o write.o read.o cs229towav.o decode.o encode.o helper.o -lm 

Clean: 
    rm -rf *o gensine info cs229towav 

:これを読んだ後

>cc gensine.c -o gensine 
/tmp/ccojm09X.o: In function `encodeCsFormat': 
gensine.c:(.text+0x4b1): undefined reference to `sin' 
/tmp/ccojm09X.o: In function `encodeWavFormat': 
gensine.c:(.text+0xa39): undefined reference to `sin' 
collect2: error: ld returned 1 exit status 

、罪への未定義の参照が言うされ、私は以下の私のメイクファイルをリンクしていますこれは数学ライブラリと一緒です。これらの関数は、 "gensine.c"ファイルに含まれている "encode.c"ファイルにあります。メイクファイルで

+3

出力の断片が上記のメイクファイルに対応していないようですが、makeが正しいメークファイルをピックアップしていますか? – fvu

答えて

11

コマンド:makeが知っていることは-lm

注意が存在しないことも

cc gensine.c -o gensine 

お知らせ:

gcc -o gensine encode.o gensine.o write.o helper.o -lm 

は、あなたが最後に印刷されたコマンドと一致していませんあなたがmakefileの大部分を必要としないようにオブジェクトファイルを作る方法。

.PHONY : all clean 
all = gensine info 
CFLAGS =-Wall 
LIBS = -lm 

gensine: encode.o gensine.o write.o helper.o 
     gcc -o [email protected] $^ $(LIBS) 

info: read.o info.o decode.o helper.o 
     gcc -o [email protected] $^ $(LIBS) 

cs229towav: write.o read.o cs229towav.o decode.o encode.o helper.o 
     gcc -o [email protected] $^ $(LIBS) 

clean: 
     rm -rf *.o gensine info cs229towav 

編集:この(タブがインデントすることを忘れないでください)試してみてください - すなわち

Boddieを、あなたはメイクファイル、スクリプトだと思ったので、あなたの混乱が生じたことに注意してください。 make gensineと入力したときにmakeという名前のスクリプトを実行していたとします。実際にはmakeは、ファイルシステムのどこか他の場所にあるgccのようなコマンドです(Linuxの場合は、それがどこにあるかはwhich makeと入力してください)。 makeコマンドは、現在のディレクトリにmakefileまたはMakefileというビルドルールを含む入力ファイルを見つけることを想定しています。そのファイルが見つからない場合、組み込みのルールが代わりに使用されます。したがって、cc gensine.c -o gensineはあなたのmakefileのどこにもありません。必要ならば、-fスイッチで、メイクファイルの名前をmakeに(デフォルトの名前を使用しないように)@DanielFischerがコメントに記述するように言うことができます。

+0

ファイルを使用していますが、前と同じエラーが発生します。コンパイラの出力も同じです – boddie

+0

makefileとは何ですか?ディレクトリに複数のmakefileがありますか? –

+0

私はそれを「make」という名前で拡張子を付けずに「make gensine」と呼んでいます。 – boddie

関連する問題