我在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);
程序编译没有问题。但是,它不起作用。没有窗口像它应该的那样打开。有任何想法吗?
答案 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
答案 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上很好。