2012-06-28 137 views
22

我有以下错误LNK2019:无法解析的外部符号_main函数___tmainCRTStartup引用,LNK2019:无法解析的外部符号_main函数___tmainCRTStartup引用

有很多关于此错误的线程,但没有这些解决方案的工作了我。而且,没有人解释为什么这个错误在这里。

我想:在连接属性http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/14e85604-6929-4707-a22e-8cdf596926a6

  • 没有尝试过,并怀疑这些也将无法正常工作:

    为什么我得到这个错误,解决方案是什么?

  • +1

    你有'int main(char ** argv,int argc)'函数吗? – Linuxios

    +3

    @Linuxios,它的“int main(int argc,char ** argv)”(你的原型的顺序是错的) – BlakBat

    +1

    @BlakBat:谢谢。抱歉。无论如何,我甚至都没有在Windows上工作,但这是所有地方的签名。卫生署。 – Linuxios

    回答

    27

    你的项目类型是什么?如果它是“Win32项目”,则入口点应为(w)WinMain。如果它是“Win32控制台项目”,那么它应该是(w)main。取决于是否定义了UNICODE,名称_tmain被定义为mainwmain

    如果是DLL,那么DllMain

    项目类型可以在项目属性,链接器,系统,子系统下看到。它会说“控制台”或“Windows”。

    请注意,入口点名称因UNICODE是否定义而异。在VS2008中,它是默认定义的。

    正确的原型主要是要么

    int _tmain(int argc, _TCHAR* argv[]) 
    

    int _tmain() 
    

    确保它是其中之一。

    编辑:

    如果你在_TCHAR得到一个错误,将一个

    #include <tchar.h> 
    

    如果您认为问题出在头一个,去与主文件的属性(),并在预处理器下,启用预处理文件的生成。然后编译。你会得到一个与.i扩展名相同的文件。打开它,看看main()函数是否有什么不幸的事情发生。可以有流氓#定义在理论上...

    EDIT2:

    利用所定义的UNICODE(这是默认值),连接器预计将wmain入口点(),而不是主要的()。 _tmain具有UNICODE不可知的优势 - 它可以转换为主要或主要。

    前一段时间,有一个理由来维护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被定义为char或wchar_t。所以_tmain是main(int argc,char ** argv)或wmain(int argc,wchar_t ** argv)。

    之所以在某个时候出现_tmain错误,可能是因为您没有将argv的类型更改为_TCHAR**

    如果你不打算永远支持ANSI(可能不是),你可以重新制定你的入口点

    int wmain(int argc, wchar_t *argv[]) 
    

    并删除tchar.h包括线。

    +0

    项目类型是控制台 –

    +0

    我试着将int main()更改为int _tmain()并且仍然存在lnk2019错误 –

    +0

    int _tmain(int argc,_TCHAR * argv []) 导致错误C2061:语法错误:identifier'_TCHAR “;我尝试用int main(int argc,char ** argv)来返回初始lnk2019错误 –

    0

    在Linux和Windows这main作品 - 发现通过试错和他人的帮助所以不能解释为什么它的工作原理,它只是做int main(int argc, char** argv)

    没有必要tchar.h

    ,这里是维基百科上的相同答案Main function

    +0

    曾听说过wmain()? –

    3

    我在尝试关闭控制台应用程序项目中的预编译头文件并删除头文件stdafx时出现此错误。^ h

    要解决这个问题去你的项目属性 - >链接器 - >子系统 和值更改为没有设置

    在主类中,使用他人已经提到了标准C++的主要功能protoype :

    int main(int argc, char** argv) 
    
    1

    我发现,当我选择的 项目 - >属性 - >连接器 - >系统 - >于子系统的>控制台选项(/子系统:控制台), 并确保包括 功能: int _tmain(int argc,_TCHAR * argv []){return 0} 所有的编译,链接和运行都可以;

    +0

    确保包含tchar.h – Shania

    +0

    这也适用于我。事实上,当子系统“未设置”时它也起作用。 – user2799508

    5

    因为它尚未提到的,这是我的解决方案:

    我为我的项目创建一个新的配置后过这样的错误了DLL。我必须去Project Properties -> Configuration Properties -> General并将Configuration Type更改为Dynamic Library (.dll)

    因此,如果您在尝试其他任何操作后仍遇到问题,请检查配置类型是否适合您的项目。如果设置不正确,编译器将寻找错误的主符号。在我的情况下,它正在寻找WinMain而不是DllMain

    1

    我有这个错误时,意外地将wmain放在命名空间中。 wmain不应该在任何命名空间中。此外,我在我使用的一个库中有一个主要功能,而VS从那里开始了主要功能,甚至让它变得更加陌生。

    +0

    我敢打赌,这是很多情况下的问题。 –

    1

    我在几分钟前遇到了这个问题。当我将'extern'C''添加到main()定义时,它消失了。

    奇怪的是,我昨天写的另一个简单的程序几乎是相同的,没有extern“C”,但没有链接器错误编译。

    这让我觉得这个问题是一些微妙的设置,可以在一些配置对话框中找到,而'extern“C”'并不真正解决底层问题,但表面上可以让事情起作用。

    2

    如果您有一个“Win32项目”+定义了一个WinMain,并且您的子系统链接器设置被设置为WINDOWS,如果有人将链接器设置中的“其他选项”设置为“/ SUBSYSTEM: CONSOLE”(貌似优于实际的子系统设置这个额外的设置。

    0

    对我来说,那是因为我不小心删除(不删除)的stdafx.htargetver.h文件在头文件部分。

    添加这些文件回到头文件并且问题解决了。

    我有这些:

    #pragma comment(linker, "/entry:\"mainCRTStartup\"") // set the entry point to be main() 
    

    我只需要评论说,(在前面//),它是很好的。

    0

    我也曾在Visual Studio 2015中发生过这种情况,原因很有趣。只是在这里添加它,以防其他人发生。

    我已经有项目中的文件数量,我正在添加另一个主要功能,但是当我最初添加文件时,我在扩展名(.coo而不是.cpp)中输入了拼写错误。我纠正了这个错误,但是当我完成时,我得到了这个错误。事实证明,Visual Studio很聪明,当添加文件时,由于最初的扩展,它决定它不是源文件。

    右键单击解决方案资源管理器中的文件并选择属性 - >常规 - > ItemType并将其设置为“C/C++编译器”修复了此问题。

    -1

    我以前遇到过这个问题,但解决了。主要的问题是我错误地拼写了int main()函数。而不是写int main()我写了int mian()....干杯!

    +1

    这个答案对你自己来说太具体了。由于'主'在OP的问题中没有任何拼写错误,所以没有理由认为这是问题所在。 – lwassink

    +1

    OP没有显示任何源代码,他只是说错误。今天我有同样的错误,但后来意识到我拼错了main这个词,所以在纠正错误后消失了。 –

    0

    Screen snapshot Visual Studio 2015

    设置系统到控制台,继先前的建议。只有,还必须将字符集更改为Unicode,请参阅上面的Visual Studio 2015的快照。

    相关问题