Не удается связать с SDL в XCode4! - PullRequest
4 голосов
/ 27 мая 2011

Я полностью расстроен! Я пытался акклиматизироваться с SDL сегодня вечером, но я ударил кирпичную стену, пытаясь соединиться с ней через XCode4! Вот что я сделал. Я скачал v1.2.14 библиотек среды выполнения SDL и разработки xtras. Я следовал всем указаниям (перетаскивая / опуская SDL.framework в / Library / Frameworks) до того момента, когда я понял, что шаблоны не работают в XC4, как это было в XC3.x. Я набросился на шаблоны и попытался добавить фреймворк в приложение ванильного какао. (Создано из встроенного шаблона приложения.) Я добавил файлы SDLMain .h .m и .nib и попытался собрать. Сразу же я получил сообщение о том, что не может найти "SDL.h". Я вручную скорректировал настройки пути поиска заголовка для всех конфигов, хотя я думал, что в этом нет необходимости, если я ссылаюсь на фреймворк напрямую. Таким образом я обошёл отсутствующий заголовочный файл, но начал сталкиваться с ошибками компоновщика.

"_SDL_main", referenced from:
      -[SDLMain applicationDidFinishLaunching:] in SDLMain.o

Я испробовал все разные варианты удовлетворения как моего компоновщика, так и компилятора. Я переместил фреймворк в свою пользовательскую папку в ~ / Library / Frameworks, я поиграл с <> и "" синтаксисом импорта. Я запустил совершенно новый проект и повторил все. Я потерялся! кто-нибудь может помочь?

Ответы [ 2 ]

5 голосов
/ 19 марта 2012

Я знаю, что это старо, но если кто-то сейчас наткнется на это.

XCode по умолчанию создает основную функцию с объявлением

int main(int argc, const char * argv[])

Пока SDL ищет функцию с объявлением

int main(int argc, char * argv[])

Обратите внимание на отсутствие const в char * argv []. Кажется, что когда SDL ищет символ * [], Xcode дает ему постоянный символ * [], и это приводит к тому, что он не может найти символ.

Мне бы очень хотелось, чтобы SDL перестал переименовывать мои функции! Должно быть лучшее решение, но эй, это пока подойдет.

2 голосов
/ 16 декабря 2011

Я не знаю, ищете ли вы это по-прежнему, но я думаю, что это потому, что SDL ищет имя символа C, а ваш main объявлен в файле C ++.

Вы должны сделать:

extern "C" int main(int argc, char *argv[])
{
    ...
}

Это "задокументировано" в SDL_main.h:

/** The application's main() function must be called with C linkage,
 *  and should be declared like this:
 *      @code
 *      #ifdef __cplusplus
 *      extern "C"
 *      #endif
 *  int main(int argc, char *argv[])
 *  {
 *  }
 *      @endcode
 */
...