使用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。我刚刚在另一个程序中看到的那些评论内容,我不确定我是否应该拥有它。
我该如何得到这个工作?
SDL头文件用宏重新定义main
。这是在SDL_main.h中:
#define main SDL_main
但是这很好。 SDL提供自己的main()
功能,然后调用您的版本。所以摆脱这些定义,他们正在变得更糟,而不是更好。
如果您的项目是基于可可的,那么您可能错过了在项目中包含SDLmain.m
。这提供了一种可可友好的main()
功能。如果您的项目是本地C++,那么我的猜测是您没有在项目中包含所有SDL库,因此链接程序没有看到SDL自己的main()
。
我的项目是C++。我在SDL_main.h中看到#define行。你是什么意思,我没有核准所有的SDL库? SDL。包括我在内的许多其他SDL头文件,所以我应该有我需要的东西。我还能输入什么?虽然,我没有在框架中看到任何.cpp文件。 – Cole
SDL.h是一个头文件,而不是一个库。 SDL中的代码存储在库或框架中(具体取决于您安装SDL的方式)。您必须将库或框架添加到项目中,以便链接器可以获取SDL代码。 – Miguel
嗯,我想我是这么做的。在Xcode的“构建阶段”选项卡上,我在“链接二进制库”部分中有SDL.framework。导入SDL.h只在我的main.cpp中。我应该在其他地方添加框架吗? – Cole
SDL.h不包括SDL_main.h 在文件的第一行应该是:
#include SDL_main.h
SDL_main重新定义了主要功能,然后就需要的自己的初始化是让SDL与OS工作X
编译时,你也需要在libSDLmain除了链接到libSDL
这不会改变我的任何东西,但我不太了解链接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。
你能提供XCode发出的命令来编译/链接程序吗? (摆脱#ifdef的东西,BTW) –
@BrettHale我不知道我怎么会找到这个命令。它使用命令行应用程序模板与C++ Edit的默认值:认为我找到了它:http://pastebin.com/zprm01Kp – Cole