[英]undefined reference to WinMain@16 C++, SDL-2
我一直收到錯誤undefined reference to WinMain@16
。 為了節省空間, 這里有一個指向當前項目中所有文件的鏈接。 目前,除了創建一個窗口,將其填充為綠色,然后在角落繪制一個框,同時通過控制台跟蹤我的鼠標位置之外,它應該不會做太多事情。 但是,它不會構建,並且出現上述錯誤。
我的鏈接器庫是:
我遵循 C++11 ISO C++ 語言標准使用帶有 g++ 的 Codeblocks 13.12。 我的電腦使用的是 Windows 10,以防萬一。
我花了很長時間試圖找到解決方案,似乎每個人都有一個完全不同的解決方案,到目前為止,沒有一個對我有用。 一些例子包括:
-lSDL2_image
。main
功能更改為WinMain
。 我收到了同樣的錯誤信息。Windows.h
標頭。 這沒有什么值得注意的。我還應該指出,由用戶 Cheers 和 hth 提供的答案。 - 阿爾夫, 這可能就是我要找的東西,但老實說,我無法完全理解基於它我應該做什么。
如果有任何我忘記包含的相關信息,請告訴我,我會盡快完成。 提前致謝。
我想你想要
#define SDL_MAIN_HANDLED
在您的主文件中,在該行之前
#include <SDL2/SDL.h>
解釋:
在 SDL / SDL2 中,為了嘗試使某些類型的應用程序的跨平台開發更簡單,SDL 為您的應用程序創建了一個自定義“入口點”。 也就是說,您的int main()
不是真正的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文檔。
接受的答案中建議的解決方案(取消定義main
,定義SDL_MAIN_HANDLED
和所有這些)偏離了 SDL2 的使用方式。 預期的方法是否合理是另一個問題,但我更願意堅持下去。
此錯誤意味着您沒有鏈接正確的庫,或以錯誤的順序鏈接它們。
您需要按照以下確切順序進行操作: -lmingw32 -lSDL2main -lSDL2
。
這樣做可能會將錯誤更改為undefined reference to `SDL_main'
。 這意味着您使用的main
簽名與 SDL 期望的不同。 它必須是int main(int, char **)
或int main(int, char *[])
。 添加參數名稱是允許的,但您不能更改任何其他內容:您必須擁有參數,即使您不使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.