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

我的 make 文件如下所示:

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

将第二行更改为:

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

否则你的输出是 main.o 并且你在输入中丢失了它。

比手动维护殉道更好的是使用特殊的宏

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

因此,即使您扩展程序,您也不必再次编辑该命令。

于 2011-08-29T00:48:08.020 回答