2011-08-29 143 views
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 

感謝。

回答

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位是沒有用的,這是一個鏈接器指令。

+0

啊,謝謝。我在想我的系統出了問題...... – zeboidlund

7

更改第二行:

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

否則你輸出是main.o和你錯過它的輸入。

甚至比人工維護殉難更好的是使用special macros

$(CXX) -o [email protected] $+ -lSDL 

所以,即使你擴大你的計劃,你就不必重新編輯該命令。