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

我一直试图让一个超级简单的SDL程序工作.我正在使用Mac OS X Lion.我有SDL在Snow Leopard工作,但它似乎不想在狮子身上工作.到目前为止我有这个:
#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()函数,然后调用您的版本.因此,摆脱这些定义,他们正在变得更糟,而不是更好.

如果您的项目是基于Cocoa的,那么您可能错过了在项目中包含SDLmain.m.这提供了一个Cocoa友好的main()函数.如果您的项目是本机C,那么我的猜测是您没有在项目中包含所有SDL库,因此链接器没有看到SDL自己的main().

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...