Ошибка SDL Неопределенные символы для архитектуры x86_64 & quot; _SDL_main & quot;

Я использую 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);

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

11

Решение

Готов поспорить 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 вызывает ошибку компоновщика

17

Другие решения

У меня была такая же проблема, хотя моя основная подпись была правильной. Я нашел ответ здесь: SDL в XCode 4.3.2 SDLMain.o неопределенные символы

Оказалось, проблема была в том, что я добавил SDLMain.m и SDLMain.h
(согласно предложению на сайте libSDL об OS X
frameworks) в существующий проект SDL, который перепутался с main.
Суть в том, что вам не нужны эти файлы только потому, что вы
использование какао — собственные тестовые приложения SDL тоже не используют и запускают просто
хорошо на OS X.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector