[英]Error when Linking SDL2 using Clang on Windows “LNK1561: entry point must be defined”
[英]SDL2: LNK1561: entry point must be defined
我想編譯這段代碼:
#include <SDL.h>
int main(int argc, char* argv[]) {
return 0;
}
但無法鏈接: Error 1 error LNK1561: entry point must be defined
這個庫中有一些奇怪的代碼: http : //hg.libsdl.org/SDL/file/75726efbf679/include/SDL_main.h
#define main SDL_main
我還添加了SDL2.lib;SDL2main.lib
到項目設置 => 鏈接器 => 輸入。
我可以做什么來運行這個項目?
VS 2012 SP3,空的 C++ 項目。
我發現設置/SUBSYSTEM:CONSOLE只是解決方案的一半。 后半部分是將SDL_MAIN_HANDLED
添加到您的附加定義中。 我用來解決這個問題的線索可以在SDL_main.h 中找到。 設置SDL_MAIN_HANDLED
告訴 SDL 頭文件您已經提供了一個main
函數並且不希望它重新定義它自己的入口點。
不要#undef main
! 雖然在 SDL 方面重新定義它是一個非常糟糕的做法,但他們有充分的理由: WinMain
是在庫方面定義的,用於運行一些初始化代碼,有助於解決兼容性問題。 (在使用不同的 SDL 實現時更是如此,例如 Steam 或移植到 Android 等其他平台)
那你該怎么辦? 在Windows上,你應該始終包括SDL2main.lib
之前SDL2.lib
,並確保你的主要格式為:
int main(int argc, char* argv[]) // CORRECT
void main(int argc, char* argv[]) // WRONG
int main(int, char**) // MAY BE CORRECT
正如tinky_winki所寫
右鍵單擊項目名稱 -> 屬性 -> 展開鏈接器選項卡 -> 系統 -> 子系統:確保它是控制台 (/SUBSYSTEM:CONSOLE)
但是,如果您不希望帶窗口的控制台簡單地使用, /SUBSYSTEM:WINDOWS
項目>>屬性>>鏈接器>>高級>>入口點=主要和應用
打開sdl_main.h
改變
#define main sdl_main
到
#define sdl_main main
現在它將與簡單的int main()一起工作,但這對短期解決方案來說是糟糕的萬歲
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.