2010-02-24 3 views
4

Когда я пытаюсь использовать SDL в моей программе C++, я получаю следующее:SDL вызывает Неопределенные символы: «_main», ссылки из: старт в crt1.10.5.o

> g++ minimal.cpp SDLMain.m 
Undefined symbols: 
    "_main", referenced from: 
     start in crt1.10.5.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Вот мой minimal.cpp :

#include <SDL/SDL.h> 
int main(int argc, char **argv) { 
    return 0; 
} 

что я мог собрать из http://www.libsdl.org/faq.php?action=listentries&category=7, что, включив SDL.h, переименовывает свою основную функцию через некоторые макро магии. Но тогда SDLMain.m должен снова сделать все правильно, вызвав эту переименованную функцию. Но почему-то этого не происходит?

Я бегу леопарда.

Обратите внимание, что это другой вопрос от вопроса 550455.

ответ

2

Решение было использовать файл SDLMain.m включены в SDL-разви-1.2.14-extras.dmg с домашней страницы СВД. По какой-то причине тот, который я использовал раньше, загадочно перестал работать. Команда Вот мой рабочий компилировать:

g++ -framework SDL -framework Cocoa -I/usr/local/include/SDL/ minimal.cpp "/Library/Application Support/Developer/Shared/Xcode/Project Templates/SDL Application/SDLMain.m" 
+0

Благодарим вас за это! <3 <3 <3 –

3

Вы также можете использовать предоставленный инструмент с помощью SDL SDL-конфигурации:

gcc sdltest.c -o sdltest `sdl-config --cflags --libs` 
0

Config: OSX 10.10.5 Xcode 7,0 SDL 1.2.15

Как воспроизвести:

  1. Скопировал SDL.Framework в/Library/Frameworks, как описано на readme.txt

  2. На Xcode Шаблон> Настройки Строительство> Framework Поиск пути в/Library/Frameworks

  3. Я включил SDL рамки на файл main.cpp следующим образом:

    < #include SDL/SDL.h >

Тогда я была такая же проблема loadi ng SDL Framework на XCODE из-за двойного объявления класса main, который блокировал компиляцию.

Это сообщение об ошибке:

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
    implicit entry/start for main executable 
    (maybe you meant: _SDL_main) 

Это, как я ее решил:

я проверил и увидел, что SDL.h это включая все следующие файлы:

#include "SDL_main.h" 
#include "SDL_stdinc.h" 
#include "SDL_audio.h" 
#include "SDL_cdrom.h" 
#include "SDL_cpuinfo.h" 
#include "SDL_endian.h" 
#include "SDL_error.h" 
#include "SDL_events.h" 
#include "SDL_loadso.h" 
#include "SDL_mutex.h" 
#include "SDL_rwops.h" 
#include "SDL_thread.h" 
#include "SDL_timer.h" 
#include "SDL_video.h" 
#include "SDL_version.h" 

#include "begin_code.h" 

One из них - SDL_main.h, и по этому файлу мы видим:

#define main SDL_main 

Эта строка создает конфликт с основным классом на main.cpp, комментируя эту строку на SDL_main.h или комментируя строку #include "SDL_main.h" на SDL.h, решая проблему. Я ноб на C++ (я просто узнал об этом в университете много лет назад), но с других языков я знаю, что «взломать» библиотеку - очень плохая практика ... хотя, похоже, это особая проблема совместимости с MAXOSX и я действительно хочу использовать XCODE ...

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

Cheers!

+0

Спасибо! Это было так долго, что я даже не помню, чтобы просить об этом, но, надеюсь, ваш ответ будет полезен другим. – Bemmu

+0

Более чистый способ достижения того, что вы сделали, будет '#undef main' в main.cpp после' #include '. Я считаю, что правильное исправление для SDL заключается в том, чтобы включить их основную функцию либо в -lSDLmain в командной строке компоновщика, либо с помощью SDLMain.m. – Raptor007

 Смежные вопросы

  • Нет связанных вопросов^_^