使用XCode 4在Mac OS X Lion上安装SDL

问题描述:

我一直在试图让一个超级简单的SDL程序正常工作。我正在使用Mac OS X Lion。我有SDL在雪豹工作,但它似乎并不想在狮子工作。到目前为止,我有这样的:使用XCode 4在Mac OS X Lion上安装SDL

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

using namespace std; 

/* 
#ifdef main 
# undef main 
#endif 
*/ 

int main(int argc, char* args[]) 
{ 
    SDL_Surface* hello = NULL; 
    SDL_Surface* screen = NULL; 
    SDL_Init(SDL_INIT_EVERYTHING); 
    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    hello = SDL_LoadBMP("hello.bmp"); 
    SDL_BlitSurface(hello, NULL, screen, NULL); 
    SDL_Flip(screen); 
    SDL_Delay(2000); 
    SDL_FreeSurface(hello); 
    SDL_Quit(); 

    return 0; 
} 

当我尝试编译此代码(在Xcode 4.1),它给了我这个错误:

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.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) 

如果我取消注释的#ifdef东西,我现在有评论说,该程序编译,但随后在SDL_SetVideoMode行上接收到SIGABRT。我刚刚在另一个程序中看到的那些评论内容,我不确定我是否应该拥有它。

我该如何得到这个工作?

+0

你能提供XCode发出的命令来编译/链接程序吗? (摆脱#ifdef的东西,BTW) –

+0

@BrettHale我不知道我怎么会找到这个命令。它使用命令行应用程序模板与C++ Edit的默认值:认为我找到了它:http://pastebin.com/zprm01Kp – Cole

SDL头文件用宏重新定义main。这是在SDL_main.h中:

#define main SDL_main 

但是这很好。 SDL提供自己的main()功能,然后调用您的版本。所以摆脱这些定义,他们正在变得更糟,而不是更好。

如果您的项目是基于可可的,那么您可能错过了在项目中包含SDLmain.m。这提供了一种可可友好的main()功能。如果您的项目是本地C++,那么我的猜测是您没有在项目中包含所有SDL库,因此链接程序没有看到SDL自己的main()

+0

我的项目是C++。我在SDL_main.h中看到#define行。你是什​​么意思,我没有核准所有的SDL库? SDL。包括我在内的许多其他SDL头文件,所以我应该有我需要的东西。我还能输入什么?虽然,我没有在框架中看到任何.cpp文件。 – Cole

+0

SDL.h是一个头文件,而不是一个库。 SDL中的代码存储在库或框架中(具体取决于您安装SDL的方式)。您必须将库或框架添加到项目中,以便链接器可以获取SDL代码。 – Miguel

+0

嗯,我想我是这么做的。在Xcode的“构建阶段”选项卡上,我在“链接二进制库”部分中有SDL.framework。导入SDL.h只在我的main.cpp中。我应该在其他地方添加框架吗? – Cole

SDL.h不包括SDL_main.h 在文件的第一行应该是:

#include SDL_main.h 

SDL_main重新定义了主要功能,然后就需要的自己的初始化是让SDL与OS工作X

编译时,你也需要在libSDLmain除了链接到libSDL

+0

这不会改变我的任何东西,但我不太了解链接libSDLmain。我正在使用一个框架(mac os 10.7),另外我的SDL.h包含了SDL_main.h。 – Cole

如果您使用的是SDL的框架,你只需将文件SDLMain.h和SDLMain.m添加到项目中(假设ÿ您已经将SDL.framework添加到您的项目中)。

您在SDL磁盘镜像,您可以在这里下载的“devel的 - 精简版”文件夹中找到这些文件:http://www.libsdl.org/release/SDL-1.2.15.dmg

这两个文件会给你一个可可友好的主程序,让您的SDL应用可以是一个行为良好的OS X应用程序。

我有同样的链路时间误差为OP一个纯粹的C++ &的OpenGL应用程序,解决方案是从https://github.com/Ricket/HelloSDL

使用示例项目这让我加入可可库,但would have been needed anyway,因为我是目标iPhone。