【发布时间】:2010-03-06 11:30:05
【问题描述】:
我正在尝试编译我在 OS X 上使用 C++ 和 SDL 编写的俄罗斯方块程序。首先我尝试这样做:
`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 或找到一些方法将其轻松分发给朋友。
编辑:
这是最终的 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 $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -rf *.o $(EXECUTABLE)
【问题讨论】:
-
我知道这是一个旧帖子...但是对于每个
new都应该有一个delete。