Подтвердить что ты не робот

Ошибка 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);

программа компилируется без проблем. Однако это не работает. Окно не открывается, как предполагалось. Есть идеи?

4b9b3361

Ответ 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.