xcode — Почему я не могу скомпилировать SDL на Mac для x86_64 с использованием C ++?

Я работаю на Mac Mini, конец 2012 года (последний), 64-разрядной версии, Intel Core i7 2,3 ГГц HyperThreading x86_64, или, как говорит мой компьютер. Я также использую Code :: blocks в настоящее время, потому что помощь в Xcode (которую я бы предпочел) еще более разрежена, потому что я использую C ++. При этом предпочтительным языком программирования является C ++, и в конечном итоге он расширится до Objective-C ++, но это на другой день.

Проблема заключается в следующем: я пытаюсь скомпилировать программу, которая будет делать, я не совсем уверен, что еще (это шаблон, давайте просто скажем, что это игра на данный момент.) С использованием SDL 1.2.15, который я скомпилировал из исходного кода на моем Mac. (Я действительно пытался использовать SDLmain.m и SDL.h, но он был полон кода Objective-C, и, поскольку я не мог найти хорошую информацию о том, могу ли я писать на C ++ с ними в Интернете, я сдался.) исходный код, который я скомпилировал, кажется, работает нормально, Code :: Blocks может скомпилировать учебник, и он работает нормально. Тем не менее, я не могу заставить свой игровой шаблон работать. Компилируется нормально, без ошибок и предупреждений, но компоновщик не делает то же самое. Теперь я действительно не уверен, что ld делает, я просто знаю, что это связывает воедино код. (Кто-нибудь хочет уточнить это?) Когда Code :: Blocks достигает шага связывания, он завершается с этим сообщением:

-------------- Clean: Debug in PyroLauncher ---------------

Cleaned "PyroLauncher - Debug"
-------------- Build: Debug in PyroLauncher ---------------

Compiling: App.cpp
Compiling: OnCleanup.cpp
Compiling: OnEvent.cpp
Compiling: OnInit.cpp
Compiling: OnLoop.cpp
Compiling: OnRender.cpp
Linking console executable: bin/Debug/PyroLauncher
Undefined symbols for architecture x86_64:
"_SDL_GetError", referenced from:
App::OnInit()     in OnInit.o
"_SDL_Init", referenced from:
App::OnInit()     in OnInit.o
"_SDL_PollEvent", referenced from:
App::OnExecute()     in App.o
"_SDL_Quit", referenced from:
App::OnCleanup()     in OnCleanup.o
"_SDL_SetVideoMode", referenced from:
App::OnInit()     in OnInit.o
"_main", referenced from:
start in crt1.10.6.o
(maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

Что меня серьезно смутило. Я просто знаю, что ld не может найти для моей родной архитектуры x86_64. Если кто-нибудь может мне помочь, это будет с благодарностью.
Что я думаю, что решения могут быть: (Я не знаю, как их сделать, однако.)
SDL не скомпилирован для 64-битного и, следовательно, не может быть скомпилирован с 64-битным кодом.
SDL скомпилирован для Objective-C, и поэтому не может использоваться с кодом на C ++.
Мой код 32-битный, SDL 64-битный, и они не совместимы.

2

Решение

Вы понимаете, что здесь происходит? Ваш код вызывает функции, которые компоновщик (ld) не может найти.

Две основные вероятности состоят в том, что вам нужно либо включить в проект несколько файлов, либо определить макросы.

Поиск по проекту для определения SDL_GetError() (и др). Если вы не нашли его, вам нужно найти файл, который объявляет это, и включить его.

Если вы найдете его, то он, вероятно, будет окружен #ifdef XXXX и вам придется определить xxxx в опциях вашего проекта (не в вашем коде). Большинство хороших IDE (я использую NetBeans с Cygwin для разработки на C +) затеняет тогда содержимое ifdef если он не определен, то вы можете сразу увидеть, если это так.

Кстати, посмотрите на сайте SDL инструкции по установке. Кроме того, ваша загрузка может иметь файл с именем «Install» или «Install.txt», а также может иметь Makefile. Если это так, то в вашей IDE ищите опцию Project / New … из существующего make-файла.

Надеюсь это поможет.

1

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

Вам нужно добавить файлы SDLMain.m и SDLMain.h в ваш проект. Файлы SDLMain содержат клейкий код, поэтому SDL-код может работать в Mac OS X. Вам также необходимо связать инфраструктуру Cocoa с вашим проектом. Версия SDL для Mac написана на Какао, поэтому вам нужно связаться с Какао. Связывание инфраструктуры Какао не заставляет вас использовать Objective-C. Вы можете написать свою игру на C ++.

Если вы ищете информацию о настройке SDL с Xcode 4, прочитайте следующую статью:

Использование SDL с Xcode 4

0

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