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

Простое включение заголовка SDL вызывает ошибку компоновщика

Я собирался перенести свою игру из перенасыщения в sdl.

Он отлично работает в перенасыщении, но я хотел использовать некоторые функции sdl.

Итак, я перехожу к своим свойствам проекта, под заголовком целей я нажимаю программу, которая будет скомпилирована, построит фазы, свяжет двоичные файлы с библиотеками, добавит SDL.framework

Точно так же, как я сделал для OpenGL.framework и GLUT.framework

Однако, когда я добавляю: #include <SDL/SDL.h>, при попытке сборки возникает ошибка компоновщика:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      __start in crt1.o
     (maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Googling просто приводит к довольно небольшим результатам, но никаких реальных объяснений.

4b9b3361

Ответ 1

SDL использует макрос, чтобы переименовать ваш main(..) и должен предоставить его собственный, обычно реализованный в SDLmain.m. Он должен поставляться вместе с SDL.framework.

Когда вы загружаете фреймворк здесь http://www.libsdl.org/download-1.2.php Прочтите ReadMeDevLite.txt в папке devel-lite.

Другое описание http://www.meandmark.com/sdlopenglpart2.html

Ответ 2

Я обнаружил, что когда я получаю ошибку:

Undefined символы для архитектуры x86_64:
     "_main", на который ссылаются:
    неявный ввод/запуск для основного исполняемого файла
     (возможно, вы имели в виду: _SDL_main)

Я забыл пойти в Project → Build Phases → Compile Sources и добавить SDLMain.m в список. Это сразу решило проблему.