关于c ++:错误LNK2019:函数___tmainCRTStartup中引用的未解析的外部符号_WinMain @ 16

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

我该怎么办?


这是一个链接器问题。

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

从Windows(/subsystem:windows)到控制台(/subsystem:console)

这个帮了我


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

或者,如果您想保留Windows子系统,您只需提示您的入口点是什么,因为您还没有定义___tmainCRTStartup。您可以通过将以下内容添加到属性->链接器->命令行来完成此操作:

/ENTRY:"mainCRTStartup"

这样就摆脱了控制台窗口。


如果您遇到此问题并且正在使用qt-您需要链接qtmain.lib或qtmaind.lib


包括,该行有:

1
#define _tWinMain wWinMain

除了像其他人所说的那样将其更改为Console (/SUBSYSTEM:CONSOLE),您可能还需要在properties->linker->advanced->entry point中更改入口点。将其设置为maincrt启动。

如果不另外指定,Visual Studio似乎正在搜索winmain函数而不是main。


如果使用的是Unicode字符集,但未设置该项,则可以指定/entry:"wwInIncrtStartup"


我看不到主要功能。

请确保它具有主要功能。

例子:

1
2
3
int main(int argc, TCHAR *argv[]){

}

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


如果您的项目是dll,那么情况可能是链接器想要构建一个控制台程序。打开项目属性。选择常规设置。在那里选择配置类型动态库(.dll)。


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

把64位lib文件改成32位(x86)对我来说是个小把戏,我希望它能帮上忙!


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

_WinMain是微软链接时main的名称。

另外:您还没有运行代码,您正在编译(和链接)代码。C++不是一种解释性语言。


如果您使用的是cmake,那么在控制台应用程序上设置SET(GUI_TYPE WIN32)时也会出现此错误。


如果您确实想使用_twinmain()而不是main()。确保与项目相关的配置

  • 链接器->系统->子系统=>Windows(/subsystem:windows)
  • C/C++->预处理器->预处理器定义= >用窗口替换控制台
  • 在定义了_twinmain()的c/cpp文件中,添加:

    #include #include