Ошибка SDL Undefined символов для архитектуры x86_64 "_SDL_main"
Я использую С++ с SDL Cocoa и Foundation framework на моем mac os x. Я получаю следующую ошибку:
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);
программа компилируется без проблем. Однако это не работает. Окно не открывается, как предполагалось. Есть идеи?
Ответы
Ответ 1
Я уверен, что ваша функция 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
Для получения дополнительной информации см. Простое включение заголовка SDL вызывает ошибку компоновщика
Ответ 2
У меня была такая же проблема, хотя моя основная подпись была правильной. Я нашел ответ здесь: SDL в XCode 4.3.2 SDLMain.o undefined символы
Выяснилось, что я добавил SDLMain.m и SDLMain.h(согласно предложению на сайте libSDL об ОС X рамки) к существующему проекту SDL, который перепутался с основным. Итог - вам не нужны эти файлы только потому, что вы используя Cocoa - собственные тестовые приложения SDL не используют его и запускают только отлично работает на OS X.