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

时间:2011-07-08 15:05:06

标签: c++ visual-studio visual-c++

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

#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中引用的未解析的外部符号___tmainCRTStartup

我该怎么办?

13 个答案:

答案 0 :(得分:337)

这是一个链接器问题。

尝试更改属性 - &gt;链接器 - &gt;系统 - &gt; SubSystem(在Visual Studio中)。

Windows(/ SUBSYSTEM:WINDOWS)控制台(/ SUBSYSTEM:CONSOLE)

This one helped me

答案 1 :(得分:79)

正如其他人提到的那样,你可以将SubSystem更改为Console,错误就会消失。

或者如果您想保留Windows子系统,您可以只提示您的入口点,因为您尚未定义___tmainCRTStartup。您可以通过将以下内容添加到属性 - &gt;来执行此操作。链接器 - &gt;命令行

  

/ ENTRY: “mainCRTStartup”

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

答案 2 :(得分:9)

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

答案 3 :(得分:8)

包括<tchar.h>,其中包含以下行:

#define _tWinMain wWinMain

答案 4 :(得分:6)

如果使用Unicode字符集,但未设置条目,则可以指定/ ENTRY:“wWinMainCRTStartup”

答案 5 :(得分:6)

除了像其他人所说的那样将其更改为a之外,您可能需要更改属性中的入口点 - &gt;链接器 - &gt;高级 - &gt;入口点。将其设置为 mainCRTStartup

如果你没有另外指定,似乎Visual Studio可能正在搜索WinMain函数而不是main函数。

答案 6 :(得分:4)

我没有看到主要功能。

请确保它具有主要功能。

示例:

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

}

希望它运作良好。 :)

答案 7 :(得分:3)

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

答案 8 :(得分:2)

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

链接时,

_WinMain是Microsoft main的名称。

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

答案 9 :(得分:2)

我不知道在哪里发布我的答案,但我认为它是正确的地方。 我今天遇到了这个错误,切换子系统并没有改变一件事。

将64位lib文件更改为32位(x86)对我来说很有用,我希望它可以帮助那些人!

答案 10 :(得分:1)

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

答案 11 :(得分:1)

如果您实际上要使用 _tWinMain()而不是 main() 确保您的项目相关配置具有

  1. 链接器->系统->子系统=> Windows(/ SUBSYSTEM:WINDOWS)
  2. C / C ++->预处理程序->预处理程序定义=>用_WINDOWS替换_CONSOLE
  3. 在定义 _tWinMain()的c / cpp文件中,添加:

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

答案 12 :(得分:0)

上面提到的博学多闻的建议将在99.99%的情况下解决该问题。幸运的是,他们没有。就我而言,事实是我包含了另一个Windows项目中的头文件。果然,在该文件的最底部,我找到了指令:

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

不用说,删除此行解决了我的问题。