Я использую C ++ с SDL Cocoa и платформой Foundation на моем 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);
программа компилируется без проблем. Тем не менее, это не работает. Ни одно окно не открывается так, как должно. Есть идеи?
Готов поспорить 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 вызывает ошибку компоновщика
У меня была такая же проблема, хотя моя основная подпись была правильной. Я нашел ответ здесь: SDL в XCode 4.3.2 SDLMain.o неопределенные символы
Оказалось, проблема была в том, что я добавил SDLMain.m и SDLMain.h
(согласно предложению на сайте libSDL об OS X
frameworks) в существующий проект SDL, который перепутался с main.
Суть в том, что вам не нужны эти файлы только потому, что вы
использование какао — собственные тестовые приложения SDL тоже не используют и запускают просто
хорошо на OS X.