静态构建Windows应用程序时出错

时间:2011-04-29 19:43:11

标签: c++ windows static-linking winmain

我有一个应用程序,当我动态链接所有内容时编译并正常工作,但是当我想要静态构建它时,它将无法编译。

在visual studio 2010中,我在“静态库”选项中设置了“使用MFC”。

当我这样做时,我收到此错误:

错误1错误LNK2001:未解析的外部符号_wWinMain @ 16 LIBCMT.lib(wwincrt0.obj)

我尝试添加LIBCMT.lib作为附加库,但这并没有改变任何东西。

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:2)

从缺少WinMain的消息中暗示,我的项目的某些部分是作为应用程序而不是作为库构建的。

尝试完全重建并确保设置所有相关选项以构建静态库。我认为libcmt.lib只应与您的最终申请相关联,而不是与图书馆相关联。

答案 1 :(得分:1)

构建程序时,有编译器标志来设置Unicode / MBCS,多线程/单线程以及其他各种东西。如果使用一组标志和其他具有不同标志的源编译某些源,那么您经常会遇到类似的链接器错误。

检查所有源是否使用相同的标志,包括您自己的任何库。

您遇到的具体错误是链接器包含来自库LIBCMT.lib的二进制文件wwincrt0.obj。 wwincrt0.obj指的是一个函数wWinMain(),并且链接器不知道在哪里找到它。

LIBCMT是LIBC的多线程版本。您将链接到其中一个,但从不两者。

wwincrt0是CRT(C运行时)启动代码的宽(UNICODE)版本,它将启动您的代码。

WinMain()是Windows主要功能,wWinMain()是WinMain()的宽(UNICODE)版本。

我猜你的一些代码是用编译器标志/ MT编译的,有些是用不同的标志(/ MTd,/ MD,/ MDd,/ LD或/ LDd)编译的。

我的第二个问题是,有些用/ DUNICODE编译,有些用/ DMBCS编译。