Компиляция SDL на OS X с помощью make-файла - PullRequest
2 голосов
/ 06 декабря 2009

Я пытаюсь скомпилировать тетрис программу, которую я написал с C ++ и SDL на OS X. Сначала я попытался сделать это:

`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) и содержится основная логика игры.

Мне бы очень хотелось написать для этого make-файл или найти способ легко разослать его друзьям.

EDIT:

вот последний make-файл на тот случай, если у кого-то возникнет такая же проблема:

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)

1 Ответ

3 голосов
/ 06 декабря 2009

Я думаю, что ваша проблема компиляции связана с основной функцией SDL.

Ошибка компиляции вызвана тем, что у вас отсутствуют ссылки на «Game.o» или что-либо еще, что называется объектным файлом, полученным в результате компиляции Game.cpp. Попробуйте:

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