我在Mac Mini上運行,2012年末(最新),64位,Intel Core i7 2.3 gHz HyperThreading x86_64,或者說我的電腦。我也暫時使用Code :: blocks,因爲Xcode(我更喜歡)的幫助更加稀疏,因爲我使用的是C++。也就是說,選擇的編程語言是C++,並且最終將擴展到Objective-C++,但那是另一天。爲什麼我無法使用C++在x86_64上的Mac上編譯SDL?
問題是這樣的:我正在嘗試編譯一個程序,我不太清楚還有什麼(這是一個模板,讓我們現在就說它是一個遊戲)。使用SDL 1.2.15,我在我的Mac上從源代碼編譯。 (我嘗試過使用SDLmain.m和SDL.h,但是這些代碼都是Objective-C的代碼,而且我沒有找到關於我是否可以用C++編寫代碼的好消息,所以放棄了。)我編譯的源代碼似乎工作得很好,Code :: Blocks可以編譯它的教程就好,它運行正常。但是,我似乎無法讓我的遊戲模板起作用。它編譯得很好,沒有錯誤或警告,但鏈接器不會這樣做。現在,我真的不確定什麼ld
做什麼,我只知道它將代碼鏈接在一起。 (任何人想詳細說說嗎?)當代碼::塊到達它的鏈接步驟失敗此消息:
-------------- 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位,並且它們不兼容。
「我真的不知道LD不,我只知道它連接起來代碼(任何人想詳細說明?)「〜http://en.wikipedia.org/wiki/Linker_%28computing%29說比我好。編譯器「編譯」每個單獨的文件(檢查是否有錯誤,如果沒有,則生成大部分彙編代碼),並由鏈接器完成剩下的工作 - 文件A從文件B調用例程,鏈接器將添加該函數的地址插入編譯器爲文件A生成的代碼(dito數據)。編譯器對單個文件起作用,而鏈接器看到整個項目並將它們拼接在一起。 – Mawg
更詳細的構建輸出會很有用,尤其是鏈接器行。 –