【问题标题】:SDL Error Undefined symbols for architecture x86_64 "_SDL_main"架构 x86_64“_SDL_main”的 SDL 错误未定义符号
【发布时间】:2013-01-10 16:14:33
【问题描述】:

我在我的 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);

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

【问题讨论】:

  • 你链接了哪些库?
  • 我正在链接所有这些。
  • 使用 64 位版本 SDK 中的所有库?
  • cocoa 和foundation 自带xcode,sdl 没有Mac 64 位以外的选项。

标签: c++ xcode macos cocoa sdl


【解决方案1】:

我敢打赌你的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

欲了解更多信息,请参阅Simply including SDL header causes linker error

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 2014-05-14
      • 2016-05-31
      • 2016-12-12
      • 1970-01-01
      相关资源
      最近更新 更多