2011-05-27 60 views
4

我非常沮喪!我正努力適應SDL今晚,但我試圖通過XCode4連接到它的磚牆!這就是我所做的。我下載了SDL框架運行時庫和development xtras的v1.2.14。我遵循了所有的方向(拖放/ Library/Frameworks中的SDL.framework),直到我意識到模板在XC4中無法像XC3.x一樣工作。我踢了模板,並嘗試將框架添加到香草可可應用程序。 (從內置的應用程序模板創建。)我添加了SDLMain .h .m和.nib文件並嘗試構建。馬上我得到一個錯誤,說它找不到「SDL.h」。我手動調整了我所有配置的標題搜索路徑設置,儘管我認爲如果我直接引用框架,這不應該是必需的。我用這種方式解決了缺少的頭文件,但開始碰到鏈接器錯誤。無法鏈接到XCode4中的SDL!

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

我已經嘗試了滿足我的鏈接器和編譯器的所有不同的演繹。我已經將框架移動到〜/ Library/Frameworks下的我的用戶文件夾中,我已經玩過<>和「」導入語法。我開始了一個全新的項目,並重復了一切。我迷路了!有人可以幫忙嗎?

+0

你的'main()'函數有兩個參數嗎? – genpfault 2011-05-27 18:35:43

+1

是的它︰int main(int argc,char ** argv) – Cliff 2011-05-29 00:49:42

+0

得到了同樣的問題:S – Emil 2011-07-05 20:21:11

回答

2

我不知道你是否還在尋找,但我認爲這是因爲SDL正在尋找一個C符號名稱,但是你的主要是在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 
*/ 
+0

謝謝,完全合理,儘管我還沒有回去再試一次。謝謝你的提示! :) – Cliff 2011-12-16 18:41:28

5

我知道這是舊的,但如果有人現在碰到這個絆倒。

的XCode默認與申報

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

創建的主要功能雖然SDL正在尋找一個函數聲明

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

注意缺少的char * argv的[]常量的。看起來,當SDL正在尋找一個char * [] Xcode給它一個const char * [],並且它導致它無法找到該符號。

我真的希望SDL停止重命名我的功能!必須有一個更好的解決方案,但是,嘿,這會做現在。