4

誰かがこれが何を意味するのか教えてもらえますか?

/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [program] Error 1

私のメイクファイルは次のようになります。

program : main.o render.o screenwriter.o
    g++ -o main.o render.o screenwriter.o -lSDL

main.o : main.cpp render.h screenwriter.h
    g++ -c main.cpp render.h screenwriter.h -lSDL

render.o : render.h render.cpp
    g++ -c render.h render.cpp -lSDL

screenwriter.o : screenwriter.h screenwriter.cpp
    g++ -c screenwriter.h screenwriter.cpp -lSDL

clean:
    rm program main.o render.o screenwriter.o -lSDL

ありがとう。

4

2 に答える 2

8

その最初のルールは

program : main.o render.o screenwriter.o
    g++ -o program main.o render.o screenwriter.o -lSDL

main.o render.o screenwriter.oという実行可能ファイルにリンクするとします。 program

また、コンパイル手順 ( -c ) では、-lDSL ビットは役に立たず、リンカー命令です。

于 2011-08-29T00:48:33.430 に答える
7

2 行目を次のように変更します。

g++ -o program main.o render.o screenwriter.o -lSDL
       ^^^^^^^

それ以外の場合、出力は main.o であり、入力で欠落しています。

特別なマクロを使用することは、手動のメンテナンス殉教よりもさらに優れています。

$(CXX) -o $@ $+ -lSDL

したがって、プログラムを拡張しても、そのコマンドを再度編集する必要はありません。

于 2011-08-29T00:48:08.020 に答える