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

Я собирался перенести мою игру с перенасыщения на 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)

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

Ответы [ 2 ]

8 голосов
/ 16 августа 2011

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 голосов
/ 30 мая 2013

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

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

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

...