簡體   English   中英

SDL2:LNK1561:必須定義入口點

[英]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++ 項目。

根據 Dream.In.Code 上的這個線程

右鍵單擊項目名稱 -> 屬性 -> 展開鏈接器選項卡 -> 系統 -> 子系統:確保它是Console (/SUBSYSTEM:CONSOLE)

或者,如果您想隱藏控制台窗口或正在調試多線程應用程序,您應該將子系統設置為Window (/SUBSYSTEM:WINDOW)

我發現設置/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

來源: SDL2 Windows 常見問題解答

正如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM