2015-09-01 76 views
2

我已經收到錯誤undefined reference to [email protected]。爲節省空間,here's a link to all the files currently in the project。目前,除了創建一個窗口之外,它不應該做太多的事情,只需將其填充爲綠色,然後在角落畫一個盒子,同時通過控制檯跟蹤鼠標的位置。但是,它不會構建,我會得到上述錯誤。未定義引用WinMain @ 16 C++,SDL-2

我的鏈接庫:

  • glew32s
  • libSDL2main
  • 的mingw32
  • libSDL2
  • opengl32
  • glew32

我使用碼塊s 13.12,g ++遵循C++ 11 ISO C++語言標準。我的電腦使用Windows 10以防萬一。

我花了很長時間試圖找到一個解決方案,似乎每個人都有一個完全不同的,到目前爲止,他們都沒有爲我工作。一些例子包括:

  • 根據this similar question將SDL2_image添加到我的鏈接庫中。它給了我錯誤-lSDL2_image
  • 從一開始就完全從頭開始項目,以防我發現某些錯字是原因。 (我得到了完全相同的錯誤)。
  • 將我的main函數更改爲WinMain。我得到了同樣的錯誤信息。
  • 添加Windows.h標題。這沒有什麼明顯的。
  • 各種據稱「正確的命令」爲我的利庫圖書館。這些似乎迄今沒有任何幫助。

我還應該指出,答案由用戶提供,乾杯和hth。 - Alf,here可能是我正在尋找的東西,但在所有的誠實中,我無法完全理解我應該在此基礎上做什麼。

如果有任何我忘記包含的相關信息,請告訴我,我會盡快這樣做。提前致謝。

+0

可能的重複http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-doi-i-fix –

+1

嘗試'#undef主'在main.cpp開頭 – Poriferous

回答

3

我想你想

#define SDL_MAIN_HANDLED 
在你的主文件

,前行

#include <SDL2/SDL.h> 

說明:

在SDL/SDL2,在努力試圖使跨某些類型應用程序的平臺開發更簡單,SDL爲您的應用程序創建一個自定義「入口點」。也就是說,你的int main()不是真的主。會發生什麼情況是,main被定義爲SDL標頭中的宏,並且這會導致您的main被重命名爲SDL_main或類似的名稱。然後,在「SDL_main」庫中定義了一個不同的main,它將是您的應用程序的真實main。此main只是以適合平臺的任何方式提取命令行參數,並調用您的main(它已重命名爲SDL_main)。

在windows上,您的應用程序是否作爲控制檯程序啓動還是作爲gui程序iiuc啓動也存在一些差異。

有時您希望SDL爲您做這些事情,但是如果您正在開發傳統的控制檯程序,通常不會。所以你通過SDL這個SDL_MAIN_HANDLED定義以防止所有這些東西。

#undef main方法也可以工作,但它不是很好,因爲這樣,您告訴SDL發生了什麼事,用另一種方法,SDL認爲它的所有內容都將被使用,事實上,您會粗暴地稍後用#undef將其禁用。

如果您想查看各種宏/平臺檢查的詳細信息,可以查看SDL_main.h標題。如果您想知道SDL主系統的優點,可以查看SDL文檔。

+0

這擺脫了錯誤。謝謝。如果你不介意我問,爲什麼/如何解決這個問題? –

相關問題