for*_*son 27 c++ windows lnk2019 visual-studio-2008 windows-7
我有以下错误LNK2019:函数___tmainCRTStartup中引用了未解析的外部符号_main,
有很多线程与此错误相关,但这些解决方案都不适用于我.并且,没有人解释为什么这个错误在这里.
我试过了:
没有尝试过并怀疑这些也行不通:
为什么我会收到此错误,解决方案是什么?
Sev*_*yev 30
你的项目类型是什么?如果它是"Win32项目",您的入口点应该是(w)WinMain
.如果它是"Win32控制台项目",那么它应该是(w)main
.名称_tmain
是#defined,可以是main
或者wmain
取决于是否定义了UNICODE.
如果它是一个DLL,那么DllMain
.
项目类型可以在项目属性,链接器,系统,子系统下看到.它会说"控制台"或"Windows".
请注意,入口点名称取决于是否定义了UNICODE.在VS2008中,它是默认定义的.
主要的适当原型是
int _tmain(int argc, _TCHAR* argv[])
Run Code Online (Sandbox Code Playgroud)
要么
int _tmain()
Run Code Online (Sandbox Code Playgroud)
确保它是其中之一.
编辑:
如果您在_TCHAR上收到错误,请放置一个
#include <tchar.h>
Run Code Online (Sandbox Code Playgroud)
如果您认为问题出在其中一个标题上,请使用main()转到该文件的属性,并在Preprocessor下启用生成预处理文件.然后编译.您将获得一个名为.i扩展名的文件.打开它,看看main()函数是否发生任何令人讨厌的事情.理论上可以有流氓#defines ......
EDIT2:
在定义UNICODE(默认值)的情况下,链接器期望入口点为wmain(),而不是main()._tmain具有与UNICODE无关的优点 - 它可以转换为main或wmain.
前一段时间,有理由同时维护ANSI构建和Unicode构建.在Windows 95/98/Me中,Unicode支持非常不完整.主要API是ANSI,并且Unicode版本存在于此处,但不是普遍存在的.此外,VS调试器在显示Unicode字符串时遇到问题.在NT内核操作系统(即Windows 2000/XP/Vista/7/8/10)中,Unicode支持是主要的,并且ANSI功能被添加到顶部.因此,自VS2005以来,项目创建时的默认值是Unicode.这意味着 - wmain.它们无法保持相同的入口点名称,因为参数类型不同._TCHAR #defined为char或wchar_t.所以_tmain要么是main(int argc,char**argv)要么是wmain(int argc,wchar_t**argv).
你_tmain
在某个时候得到错误的原因可能是因为你没有改变argv
to 的类型_TCHAR**
.
如果您不打算支持ANSI(可能不支持ANSI),您可以将您的切入点重新表述为
int wmain(int argc, wchar_t *argv[])
Run Code Online (Sandbox Code Playgroud)
并删除tchar.h
包含行.
因为还没有提到,这对我来说是解决方案:
在为我的项目创建新配置后,我遇到了DLL的错误.我不得不去Project Properties -> Configuration Properties -> General
并更改Configuration Type
到Dynamic Library (.dll)
.
因此,如果您在尝试其他所有内容后仍然遇到问题,则需要检查配置类型是否符合您对项目的预期.如果设置不正确,编译器将查找错误的主符号.就我而言,它正在寻找WinMain
而不是DllMain
.
归档时间: |
|
查看次数: |
102718 次 |
最近记录: |