我有一个应用程序,当我动态链接所有内容时编译并正常工作,但是当我想要静态构建它时,它将无法编译。
在visual studio 2010中,我在“静态库”选项中设置了“使用MFC”。
当我这样做时,我收到此错误:
错误1错误LNK2001:未解析的外部符号_wWinMain @ 16 LIBCMT.lib(wwincrt0.obj)
我尝试添加LIBCMT.lib作为附加库,但这并没有改变任何东西。
有关如何解决此问题的任何想法?
答案 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编译。