我正在尝试编译我在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)
答案 0 :(得分:3)
我认为你的编译问题与SDL主函数有关。 击>
编译失败是因为你缺少对“Game.o”的引用或者调用Game.cpp编译产生的对象文件。尝试:
g++ -o tetris main.cpp Game.o Pieces.o Whateverelse.o `sdl-config --cflags --libs` -framework Cocoa