Простое включение заголовка 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 просто приводит к довольно небольшим результатам, но никаких реальных объяснений.
Ответы
Ответ 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 в список. Это сразу решило проблему.