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

发布于 2024-11-04 00:57:18 字数 355 浏览 3 评论 0原文

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

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

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

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

我尝试将 LIBCMT.lib 添加为附加库,但这不会改变任何内容。

关于如何解决这个问题有什么想法吗?

I have an application that compiles and works fine when I dynamically link everything, but when I want to have a static build of it, it will not compile.

In Visual Studio 2010, I set the "Use MFC in a Static Library" option.

When I do that, I get this error:

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

I have tried adding LIBCMT.lib as an additional library, but that doesn't change anything.

Any ideas on how to fix this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云柯 2024-11-11 00:57:18

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

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

From the message that it's missing WinMain that implies to me that some piece of your project is being built as an application and NOT as a library.

Try a full rebuild and ensure that all relevant options are set to build a static library. I believe libcmt.lib should only be linked to your final application, NOT to the library.

一城柳絮吹成雪 2024-11-11 00:57:18

当你构建程序时,有编译器标志来设置 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 编译的。

When you build the program, there are compiler flags to set Unicode/MBCS, Multi/Single threaded and various other things. If you compile some source with one set of flags and other source with different flags, then you often get linker errors like that.

Check that all the source uses the same flags, including any of your own libraries.

The specific error you have says that the linker is including the binary wwincrt0.obj from library LIBCMT.lib. wwincrt0.obj is referring to a function wWinMain() and the linker doesn't know where to find it.

LIBCMT is the multi-threaded version of LIBC. You will link to one of those, but never both.

wwincrt0 is the wide (UNICODE) version of the CRT (C Run Time) startup code, which will launch your code.

WinMain() is the Windows main function and wWinMain() is the wide (UNICODE) version of WinMain().

I will guess that some of your code is compiled with the compiler flag /MT and some is compiled with a different flag (/MTd, /MD, /MDd, /LD or /LDd).

My second giess would be that some is compiled with /DUNICODE and some with /DMBCS.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文