SDL错误架构x86_64" _SDL_main"的未定义符号

时间:2013-01-27 00:29:31

标签: c++ xcode macos cocoa sdl

我在mac os x上使用C ++和SDL Cocoa和Foundation框架。我收到以下错误

Undefined symbols for architecture x86_64:
  "_SDL_main", referenced from:
      -[SDLMain applicationDidFinishLaunching:] in SDLMain.o
ld: symbol(s) not found for architecture x86_64

当我运行以下代码时

#import <Foundation/Foundation.h>
#import <SDL/SDL.h>
#include "SDLMain.h"
int main(int argc, const char * argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_SetVideoMode(640,480,32,SDL_DOUBLEBUF);
    SDL_Event event;
    bool isRunning = true;
    while(SDL_PollEvent(&event)){
        if(event.type == SDL_QUIT){
            isRunning=false;
        }
    }

    SDL_Quit();
    return 0;
}

我不知道出了什么问题,虽然看起来当我进入SDLMain.m文件并注释掉这行代码时

status = SDL_main (gArgc, gArgv);

程序编译没有问题。但是,它不起作用。没有窗口像它应该的那样打开。有任何想法吗?

2 个答案:

答案 0 :(得分:18)

我打赌你的main功能签名不正确。你使用:

int main(int argc, const char * argv[])
                   ^^^^^

但SDL_main.h想要

int main(int argc, char *argv[])

<强>为什么吗

你知道,SDL在编译时做了一件非常可怕的事情:它将你的main函数重命名为SDL_main,注入了自己的主函数,而这个函数又调用了你的函数。

请注意,如果这不起作用,那么您可能正在使用错误的标志进行编译。可以肯定的是,输入以下内容获取标志:

$ sdl-config --cflags --libs

有关详细信息,请参阅Simply including SDL header causes linker error

答案 1 :(得分:3)

即使我的主要签名是正确的,我也有同样的问题。我在这里找到答案:SDL in XCode 4.3.2 SDLMain.o undefined symbols

  

原来问题是我添加了SDLMain.m和SDLMain.h   (根据libSDL网站上有关OS X的建议   框架)到一个与main混淆的现有SDL项目。   最重要的是,你不需要那些文件只是因为你   使用Cocoa - SDL自己的测试应用程序既不使用也不运行   在OS X上很好。