2009-12-06 103 views
1

我試圖編譯俄羅斯方塊程序我C++和SDL在OS X先寫到我試着這樣做:OS X上編譯SDL與makefile文件

`g++ -o tetris main.cpp `sdl-config --cflags --libs` -framework Cocoa` 

,並得到這個:

Undefined symbols: 
    "Game::startGame()", referenced from: 
     _main in ccQMhbGx.o 
    "Game::Game()", referenced from: 
     _main in ccQMhbGx.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

下面是main.cpp的文件:

#include <iostream> 
#include "Game.h" 

int main(int argc, char* argv[]) { 
Game *game = new Game(); 
game->startGame(); 

return 0; 
} 

Game.h是遊戲類,所有其他類(Board.h,IO的。 h,Piece.h,Pieces.h),幷包含遊戲的主要邏輯。

我真的很希望能夠爲此編寫一個makefile或找到某種方式輕鬆地將其分發給朋友。

編輯:

這裏是萬一別人最終生成文件是有同樣的問題:

CC=g++ 
CFLAGS=-c -Wall 
SDLFLAGS=`sdl-config --cflags --libs` -framework Cocoa 
SOURCES=main.cpp Game.cpp IO.cpp Board.cpp Pieces.cpp Piece.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=tetris 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
$(CC) $(OBJECTS) $(SDLFLAGS) -o [email protected] 

.cpp.o: 
$(CC) $(CFLAGS) $< -o [email protected] 

clean: 
rm -rf *.o $(EXECUTABLE) 
+0

我知道這是一箇舊帖子...但是對於每個'new'都應該有一個'delete'。 – gldraphael 2016-04-04 18:38:41

回答

3

我覺得你的編譯問題是關係到SDL主要功能。

編譯失敗是因爲缺少對「Game.o」的引用,或者調用了編譯Game.cpp所產生的任何對象文件。嘗試:

g++ -o tetris main.cpp Game.o Pieces.o Whateverelse.o `sdl-config --cflags --libs` -framework Cocoa 
+0

感謝您的回覆,但似乎並不是這樣。由於我有幾個類分佈在幾個.cpp和.h文件中,我是否需要爲每個文件做這樣的事情: 'g ++'sdl-config --cflags' -c Pieces.cpp' – jluebbert 2009-12-06 07:49:03

+0

編譯失敗是因爲你缺少對「Game.o」的引用,或者調用Game.cpp所產生的任何對象文件。試試g ++ -o tetris main.cpp Game.o Pieces.o Whateverelse.o'sdl-config --cflags --libs' -framework Cocoa – diciu 2009-12-06 07:59:11

+0

好的,我覺得我們正在接近。現在我可以將所有類文件編譯爲.o文件,除了那個#include 。我得到:'IO.cpp:在成員函數'int IO :: isKeyDown(int)'中:IO.cpp:75:錯誤:'SDL_GetKeyState'未在此範圍內聲明'# – jluebbert 2009-12-06 08:11:48