![](/img/trans.png)
[英]Another error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
[英]error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
當我運行如下簡單代碼時,我有兩個錯誤如下:
#include <iostream>
#include <string>
using namespace::std;
template <class Type>
class Stack
{
public:
Stack (int max):stack(new Type[max]), top(-1), maxsize(max){}
~Stack (void) {delete []stack;}
void Push (Type &val);
void Pop (void) {if (top>=0) --top;}
Type& Top (void) {return stack[top];}
//friend ostream& operator<< (ostream&, Stack&);
private:
Type *stack;
int top;
const int maxSize;
};
template <class Type>
void Stack <Type>:: Push (Type &val)
{
if (top+1<maxsize)
stack [++top]=val;
}
錯誤:
MSVCRTD.lib(crtexew.obj):錯誤 LNK2019:未解析的外部符號
_WinMain@16
在 function 中引用___tmainCRTStartup
我應該怎么辦?
那是一個 linker 問題。
嘗試更改屬性 -> Linker -> 系統 -> 子系統(在 Visual Studio 中)。
從Windows (/SUBSYSTEM:WINDOWS)到控制台 (/SUBSYSTEM:CONSOLE)
正如其他人提到的,您可以將子系統更改為控制台,錯誤將 go 消失。
或者,如果您想保留 Windows 子系統,您可以提示您的入口點是什么,因為您尚未定義___tmainCRTStartup
。 您可以通過將以下內容添加到Properties -> Linker -> Command line來做到這一點:
/ENTRY:"mainCRTStartup"
這樣你就擺脫了控制台 window。
如果您遇到此問題並且正在使用 Qt - 您需要鏈接 qtmain.lib 或 qtmaind.lib
除了像其他人所說的那樣將其更改為Console (/SUBSYSTEM:CONSOLE)
之外,您可能需要在屬性 -> Linker -> 高級 -> 入口點中更改入口點。 將其設置為mainCRTStartup 。
如果您沒有另外指定,Visual Studio 似乎可能正在搜索 WinMain function 而不是 main。
包括<tchar.h>
,其中包含以下行:
#define _tWinMain wWinMain
如果您使用 Unicode 字符集,但未設置條目,則可以指定 /ENTRY:"wWinMainCRTStartup"
如果你真的想使用_tWinMain()而不是main()確保你的項目相關配置有
在定義了_tWinMain()的 c/cpp 文件中,添加:
#include <Windows.h>
#include <tchar.h>
我沒有看到主要的 function。
請確保它有主 function。
例子:
int main(int argc, TCHAR *argv[]){
}
希望它運作良好。 :)
如果你的項目是 Dll,那么情況可能是 linker 想要構建一個控制台程序。 打開項目屬性。 Select 常規設置。 Select 配置類型動態庫有(.dll)。
我不確定在哪里發布我的這個答案,但我認為這是正確的地方。 我今天遇到了這個錯誤,切換子系統並沒有改變任何事情。
將 64 位 lib 文件更改為 32 位(x86)對我有用,我希望它會幫助那里的人!
您試圖將該源文件轉換為可執行文件,這顯然是不可能的,因為未定義強制入口點, main
function。 添加一個文件 main.cpp 並定義一個主 function。 如果您正在使用命令行(我對此表示懷疑),則可以添加/c
以僅編譯而不是鏈接。 這將只生成一個 object 文件,該文件需要鏈接到 static 或共享庫或應用程序(在這種情況下,您需要一個帶有 main 定義的 oject 文件)。
_WinMain
是 Microsoft 在鏈接時對main
的名稱。
另外:你還沒有運行代碼,你正在編譯(和鏈接)它。 C++ 不是解釋型語言。
如果您使用的是 CMake,在控制台應用程序上設置SET(GUI_TYPE WIN32)
時也會出現此錯誤。
上述博學的建議將解決 99.99% 的問題。 我很幸運他們沒有。 就我而言,事實證明我包含了來自不同 Windows 項目的 header 文件。 果然,在該文件的最底部,我找到了指令:
#pragma comment(linker, "/subsystem:Windows")
不用說,刪除這條線解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.