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

3

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

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

这样做后,我会收到以下错误:

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

我已经尝试将LIBCMT.lib作为附加库添加,但这并没有改变任何东西。
有什么解决这个问题的想法吗?
2个回答

2

从提示信息中缺少WinMain,我推断您的某个项目正在被构建为应用程序而不是库。

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


我认为Jason正在构建一个exe,但包括运行时和MFC的静态版本,而不是DLL版本。 - Michael J

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编译的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接