【问题标题】:Compiling SDL on OS X with makefile在 OS X 上使用 makefile 编译 SDL
【发布时间】: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

标签: c++ macos sdl


【解决方案1】:

我认为您的编译问题与 SDL 主函数有关。

编译失败是因为您缺少对“Game.o”的引用或任何由编译 Game.cpp 产生的目标文件。试试:

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

【讨论】:

  • 感谢您的回复,但似乎并非如此。由于我有几个类分布在多个 .cpp 和 .h 文件中,我需要为每个类做这样的事情:g++ sdl-config --cflags` -c Pieces.cpp`
  • 编译失败是因为您缺少对“Game.o”的引用或任何由编译 Game.cpp 产生的目标文件。试试 g++ -o tetris main.cpp Game.o Pieces.o Whateverelse.o sdl-config --cflags --libs -framework Cocoa
  • 好吧,我觉得我们越来越近了。现在我可以将所有的类文件编译成 .o 文件,除了那个有#include 的文件。我得到:IO.cpp: In member function ‘int IO::isKeyDown(int)’: IO.cpp:75: error: ‘SDL_GetKeyState’ was not declared in this scope
  • #include 建议您使用 SDL 作为框架,在这种情况下,您需要“-framework SDL” - SDL 是作为框架还是作为系统库安装?
  • 啊,它是作为框架安装的。至少我认为是,它在 /Library/Frameworks 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2015-05-17
相关资源
最近更新 更多