簡體   English   中英

錯誤 LNK2019:未解析的外部符號 _WinMain@16 在 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()確保你的項目相關配置有

  1. 鏈接器-> 系統-> 子系統 => Windows(/SUBSYSTEM:WINDOWS)
  2. C/C++ -> 預處理器 -> 預處理器定義 => 將 _CONSOLE 替換為 _WINDOWS
  3. 在定義了_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.

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