【问题标题】:Compiling C++ with SDL on Mac OS X Lion在 Mac OS X Lion 上使用 SDL 编译 C++
【发布时间】:2013-05-30 08:18:19
【问题描述】:

我认为 Ubuntu 和 OS X 将具有类似的界面来使用 SDL 编译 C/C++ 程序,但我没有尝试,或者在 Google 上找到的似乎都不起作用。

我找到了 Xcode 的解决方案,但我没有使用 Xcode。我正在使用 Sublime Text 2 编写程序并通过命令行进行编译,因为我更喜欢它并且以这种方式工作得更快。

长话短说,每次尝试我都会收到一系列错误,到目前为止,我已将SDL.framework 复制到我的/Library/Frameworks 目录中。

这是我最接近实际编译的:

[ 674 / 174 / 0 ] $ compcpsdl

Undefined symbols for architecture x86_64:
  "_SDL_main", referenced from:
      -[SDLMain applicationDidFinishLaunching:] in ccYYA0Ea.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

终端命令(即 compcpsdl)

g++ -I/Library/Frameworks/SDL.framework/Headers main.cpp SDLmain.m -framework SDL -framework Cocoa

具有以下项目结构:

Project-Directory/
--- main.cpp
--- SDLMain.m
--- SDLMain.h

最后,以下源代码:

#include <iostream>
#include <SDL/SDL.h>

using namespace std;

int main ()
{
  cout << "Hello World!";
  return 0;
}

看来我做的一切都是正确的,但似乎没有任何工作。

各位有什么想法吗?

【问题讨论】:

  • Note sure if this is relevant? 它会匹配您的链接错误。
  • @BoBTFish 非常感谢。它没有解决我的问题,但其他答案之一满足了我的辅助查询。

标签: c++ macos compilation compiler-errors sdl


【解决方案1】:

我认为 SDL 有时会对 main 函数做一些奇怪的事情,它假定 mainfunction 是以一种方式定义的。请注意,我在 main 函数的定义中添加了 int argcchar** argv

试试:

int main (int argc, char** argv)
{
  cout << "Hello World!";
  return 0;
}

我也遇到过一次这个问题,非常令人费解。 有关更多信息,请参阅这个 * 问题:Why SDL defines main macro?

【讨论】:

  • 哇哦。它刚刚编译成功。看来 SDLmain.m 是 Cocoa 所必需的,而不是本机 C++(这是我想要的)。从编译命令中删除 SDLmain.m 和 -framework Cocoa 会导致另一个错误,但是如果我将它们留在编译命令中。
  • 忽略我上面的评论,我意识到 SDLmain.m 等是程序引用所必需的:“SDL 应用程序可以是一个表现良好的 OS X 应用程序。”谢谢@BoBTFish