SDL 错误 体系结构x86_64 "_SDL_main"的未定义符号



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

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);

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

我敢打赌你的main函数签名不正确。 您使用:

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

但SDL_main.H想要

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

为什么?

您会看到,SDL 在编译时做了一些非常可怕的事情:它将您的main函数重命名为 SDL_main,注入自己的 main 函数,而该函数又调用您的函数。

请注意,如果这不起作用,则您可能使用错误的标志进行编译。 可以肯定的是,通过键入以下内容来获取标志:

$ sdl-config --cflags --libs

有关详细信息,请参阅仅包含 SDL 标头会导致链接器错误

我遇到了同样的问题,即使我的主要签名是正确的。我在这里找到了答案:XCode 4.3.2 中的 SDL SDLMain.o 未定义的符号

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

最新更新