2011-08-15 64 views
10

我正在將我的遊戲從glut移植到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) 

谷歌搜索只會導致一個公平的結果很少,但沒有真正的解釋。

回答

8

SDL使用宏來重命名您的main(..)並且應該自行提供,通常在SDLmain.m中實現。它應該與SDL.framework一起提供。

當您從這裏下載框架http://www.libsdl.org/download-1.2.php閱讀devel-lite文件夾中的ReadMeDevLite.txt

另一種描述 http://www.meandmark.com/sdlopenglpart2.html

+0

我對基於Mac的開發相當陌生,甚至不知道一個.m文件是什麼,你能解釋一下如何分類這些東西嗎? – Blam

+2

@Blam,一個.m文件是一個Objective-C文件。 Mac版本的SDL是用Objective-C編寫的。將文件SDLMain.h和SDLMain.m添加到您的項目中。它們包含您需要在Mac OS X上編譯SDL應用程序的膠合代碼。 –

2

我發現,當我得到的錯誤:建築x86_64的

未定義的符號:
「_main」,從引用:
隱含進入/啓動主可執行
(也許你的意思是:_SDL_main)

我忘了去Project - > Build Phases - > Compile Sources和將SDLMain.m添加到列表中。這立即解決了我的問題。