我正在 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上很好。