2011-08-15 65 views
10

我正在将我的游戏从glut移植到sdl。仅包含SDL标题会导致链接器错误

它的工作完美,但我想使用一些sdl功能。

所以我进入我的项目属性,对象标题下我点击,将被编译,构建阶段程序,链接二进制与图书馆,加SDL.framework

完全相同的,因为我已经对OpenGL做.framework和GLUT.framework

然而,当我补充一下:#include <SDL/SDL.h>它与一个链接错误出现在当我尝试建立:

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     __start in crt1.o 
    (maybe you meant: _SDL_main) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

谷歌搜索只会导致一个公平的结果很少,但没有真正的解释。

回答

8

SDL使用宏来重命名您的main(..)并且应该自行提供,通常在SDLmain.m中实现。它应该与SDL.framework一起提供。

当您从这里下载框架http://www.libsdl.org/download-1.2.php阅读devel-lite文件夹中的ReadMeDevLite.txt

另一种描述 http://www.meandmark.com/sdlopenglpart2.html

+0

我对基于Mac的开发相当陌生,甚至不知道一个.m文件是什么,你能解释一下如何分类这些东西吗? – Blam

+2

@Blam,一个.m文件是一个Objective-C文件。 Mac版本的SDL是用Objective-C编写的。将文件SDLMain.h和SDLMain.m添加到您的项目中。它们包含您需要在Mac OS X上编译SDL应用程序的胶合代码。 –

2

我发现,当我得到的错误:建筑x86_64的

未定义的符号:
“_main”,从引用:
隐含进入/启动主可执行
(也许你的意思是:_SDL_main)

我忘了去Project - > Build Phases - > Compile Sources和将SDLMain.m添加到列表中。这立即解决了我的问题。