Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 使用Xcode 4在Mac OS X Lion上设置SDL_Macos_Xcode4_Osx Lion_Sdl - Fatal编程技术网

Macos 使用Xcode 4在Mac OS X Lion上设置SDL

Macos 使用Xcode 4在Mac OS X Lion上设置SDL,macos,xcode4,osx-lion,sdl,Macos,Xcode4,Osx Lion,Sdl,我一直在尝试让一个超级简单的SDL程序工作。我用的是MacOSXLion。我有SDL在《雪豹》中工作,但它似乎不想在《狮子》中工作。到目前为止,我有: #include <iostream> #include "SDL/SDL.h" using namespace std; /* #ifdef main # undef main #endif */ int main( int argc, char* args[] ) { SDL_Surface* hello = NU

我一直在尝试让一个超级简单的SDL程序工作。我用的是MacOSXLion。我有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;
}
如果我取消注释当前已注释的#ifdef内容,程序将编译,但随后会在SDL#u SetVideoMode行上接收SIGABRT。我刚刚在另一个节目中看到的评论,我不确定我是否应该拥有它


我应该如何使其工作?

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

#define main    SDL_main
但这很好。SDL提供自己的
main()
函数,然后调用您的版本。所以,摆脱这些定义,它们让事情变得更糟,而不是更好


如果您的项目基于Cocoa,那么您可能没有在项目中包含
SDLmain.m
。这提供了一个友好的
main()
函数。如果您的项目是本地C++,那么我猜您没有包含项目中所有SDL LIBs,所以链接器没有看到SDL自己的代码>()/Cys>。 文件中的第一行应该是:

#include SDL_main.h
SDL_main重新定义main函数,然后进行自己的初始化,这是使SDL与OS X一起工作所必需的


编译时,除了libSDL之外,还需要在libSDLmain中链接

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

您可以在SDL diskimage的“devel lite”文件夹中找到这些文件,您可以在此处下载:


这两个文件将为您提供一个友好的主程序,这样SDL应用程序可以是一个性能良好的OS X应用程序。

< P>我和纯C++和OpenGL应用程序的OP链接错误相同,解决方案是使用来自

的示例项目。
这让我添加了Cocoa库,但因为我的目标是iPhone。

您能提供XCode发出的编译/链接程序的命令吗?(顺便说一句,扔掉那些#ifdef的东西)@BrettHale我不知道我会如何找到那个命令。它使用命令行应用程序模板中的缺省值,用C++编辑:我觉得我的项目是C++。我确实看到了SDL#u main.h中的define行。你说我没有把所有的SDL LIB都核化是什么意思?我已经包括了SDL.h,它包括许多其他SDL头文件,所以我应该有我需要的。我还能进口什么?尽管如此,我在framework中没有看到任何.cpp文件。SDL.h是头文件,而不是库。SDL中的代码存储在库或框架中(取决于SDL的安装方式)。您必须向项目中添加库或框架,以便链接器可以获得SDL代码。我想我做到了。在Xcode的“构建阶段”选项卡上,在“链接二进制文件与库”部分中有SDL.framework。导入SDL.h仅在my main.cpp中。我应该将框架添加到其他地方吗?我将框架添加到项目树中的一个条目中,以及OpenGL框架、基础框架等。您可能想尝试一下,或者,从SDL网站安装SDLYDEVLE包,然后使用XCODE创建基于SDL模板的新项目,最后将文件移动到新项目。我希望这能有所帮助。很抱歉我这么无知,但我不知道项目树是什么。我按照这里的说明做了:我会使用这个模板,但是SDL没有更新Xcode 4的模板。这对我来说没有任何改变,但是我真的不理解链接libSDLmain。我使用的是一个框架(MacOS10.7),此外,我的SDL.h还包括SDL_main.h。
#include SDL_main.h