在函数__tmaincrtstartup中引用的未解析的外部符号_WinMain@16

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

本文关键字:外部 符号 WinMain@16 tmaincrtstartup 引用 函数      更新时间:2023-10-16

当我运行下面的简单代码时,我有两个错误,如下所示:

#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): error LNK2019:函数___tmainCRTStartup引用的外部符号_WinMain@16无法解析

我该怎么办?

这是链接器的问题。

尝试更改属性->链接器->系统->子系统(在Visual Studio中)。

Windows (/SUBSYSTEM: Windows)控制台(/SUBSYSTEM: Console)

这个帮了我

正如其他人提到的,您可以将子系统更改为Console,错误将消失。

或者如果你想保留Windows子系统,你可以暗示你的入口点是什么,因为你还没有定义___tmainCRTStartup。可以在Properties -> Linker ->命令行中添加以下内容:

/条目:"mainCRTStartup"

如果你有这个问题,正在使用Qt -你需要链接qtmain。

除了像其他人所说的将其更改为Console (/SUBSYSTEM:CONSOLE)之外,您可能需要在Properties -> Linker -> Advanced -> entry point中更改入口点。设置为mainCRTStartup

如果没有指定的话,Visual Studio可能会搜索WinMain函数而不是main。

包括<tchar.h>,它有一行:

#define _tWinMain wWinMain

如果你使用Unicode字符集,但是条目没有设置,你可以指定/entry:"wWinMainCRTStartup"

如果你真的想使用_tWinMain()而不是main()确保您的项目相关配置包含

  1. 链接器->系统->子系统=> Windows(/SubSystem: Windows)
  2. C/c++ ->预处理器->预处理器定义=>将_CONSOLE替换为_WINDOWS
  3. 在c/cpp文件中定义了_tWinMain(),添加:

    #include <Windows.h>#include <tchar.h>

我没有看到main函数

请确保它具有主要功能。

的例子:

int main(int argc, TCHAR *argv[]){
}

希望它能很好地工作。:)

如果你的项目是Dll,那么这种情况可能是链接器想要构建一个控制台程序。打开项目属性。选择常规设置。选择配置类型Dynamic Library there(.dll)

我不确定在哪里张贴我的这个答案,但我认为这是正确的地方。我今天遇到了这个错误,切换子系统并没有改变什么。

将64位库文件更改为32位(x86)对我来说很有用,我希望它能帮助到那里的人!

您试图将该源文件转换为可执行文件,这显然是不可能的,因为没有定义强制入口点main函数。添加一个文件main.cpp并定义一个main函数。如果您正在使用命令行(我对此表示怀疑),则可以将/c添加为只编译而不链接。这将只生成一个对象文件,它需要链接到静态或共享库或应用程序中(在这种情况下,您需要一个定义了main的对象文件)。

_WinMain是Microsoft在链接时对main的名称。

还有:你还没有运行代码,你正在编译(并链接)它。c++不是解释性语言

如果你正在使用CMake,你也可以得到这个错误,当你设置SET(GUI_TYPE WIN32)在控制台应用程序

上述广博的建议将在99.99%的情况下解决问题。我很幸运,他们没有。在我的例子中,结果是我包含了一个来自不同Windows项目的头文件。果然,在那个文件的最下面,我找到了这个指令:

#pragma comment(linker, "/subsystem:Windows")

不用说,删除这一行就解决了我的问题。