3

当我动态链接所有内容时,我有一个可以编译并且工作正常的应用程序,但是当我想要对其进行静态构建时,它不会编译。

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

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

Error   1   error LNK2001: unresolved external symbol _wWinMain@16  LIBCMT.lib(wwincrt0.obj)

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

关于如何解决这个问题的任何想法?

4

2 回答 2

2

从缺少它的消息来看,这WinMain对我来说意味着您的项目的某些部分是作为应用程序而不是作为库构建的。

尝试完全重建并确保设置所有相关选项以构建静态库。我相信libcmt.lib应该只链接到您的最终应用程序,而不是链接到库。

于 2011-04-29T20:44:41.637 回答
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 编译的。

于 2011-04-29T21:04:40.543 回答