未定义对“WinMain@16”的引用?

Posted

技术标签:

【中文标题】未定义对“WinMain@16”的引用?【英文标题】:undefined reference to `WinMain@16'? 【发布时间】:2012-07-28 08:33:13 【问题描述】:

我查看了其他解决方案,但我不知道为什么会这样说,因为我有一个 main. 我尝试将其构建为控制台应用程序和 GUI 应用程序。它应该是一个 GUI 应用程序(SDL)。 头文件中的任何地方都必须有一个 main 吗? 为什么会有一个 main 和 main 没有找到。

35 小时后我终于认为这是最后一个错误了。

我的 IDE 是 Code Blocks,我的编译器是 MinGW32。

【问题讨论】:

它不抱怨main,它抱怨WinMain - 你有那个在某处定义并链接吗? 演示是为 Visual Studio 为我正在使用的动画库预先编写的。我与 lib 的所有者一起工作(上帝保佑他的帮助)。但他没有时间解决我所有的问题。他说它正在编译他所做的更改。他通过电子邮件向我发送了他的更改。 lib 附带的任何演示中都没有 winmain。我还尝试用 winmain、Winmain、WinMain 和 winMain 替换 main。没有工作。 你说的演示?我们可以在某个地方下载并看看吗? @DavidMaloy 如果它是 SDL 应用程序,请查看 here。另一种可能是您没有与 SDLmain 链接。 谢谢我在链接器中需要 mingw32。 【参考方案1】:

链接时使用-lSDLmain-mwindows

【讨论】:

SDL 库已链接,但我发现 mwindows 已修复但没有该名称的库。我需要 mingw32 在链接器的顶部,我能够将我的 winmain 改回 main。【参考方案2】:

我将 mingw32 放在链接器的顶部,然后我可以使用常规的 main。 在我包含 windows.h 并获得所有额外的参数后,我让 winmain 工作。 但为了更简单的原因,我删除了它。

【讨论】:

【参考方案3】:

WinMain 是程序的可能入口点之一。

我不熟悉 Windows 上的 GCC 或“代码块”。 Microsoft 链接器的 /ENTRYPOINT 链接器选项描述了可能的入口点:http://msdn.microsoft.com/en-us/library/f9t8842e%28v=vs.110%29

如您所见,“main”用于非 unicode 控制台应用,而 WinMain 用于非 unicode GUI 应用。

在 Microsoft 链接器上,/SUBSYSTEM 选项用于决定您要构建的应用类型。

很有可能

您必须为您的编译器执行 /SUBSYSTEM 之类的操作,或者 您必须链接一些特定于编译器的库

也许您可以根据上述提示弄清楚该怎么做:-)

【讨论】:

这不适用于 mingw。如果没有明确指定,mingw 使用main 作为入口点。 @Lol4t0 不真实;如果您与-mwindows 链接,则入口点是WinMain-mconsole 是默认值的事实是开箱即用符合标准... @rubenvb,你用的是什么gcc 版本? 4.7.0 使用 main,即使是 -mwindows。 manual page 也没有说明任何入口点更改。 @Lol4t0 我使用 MinGW-w64 GCC 并且在使用 -mwindows 时我得到了对 WinMain 的未定义引用:pastebin.com/Ur6RZbuS 这与入口点无关,而与需要存在的功能有关。对于-mwindows,使用不同的CRT 文件(它有main,但需要用户的WinMain)。所以入口点可能没有改变,你仍然需要一个WinMain 函数。 @rubenvb,由于 C++ 标准的 3.6.1,似乎是 mingw64 中的一个错误。

以上是关于未定义对“WinMain@16”的引用?的主要内容,如果未能解决你的问题,请参考以下文章

C语言里面对啥未定义引用是啥意思?

对结构方法的未定义引用[重复]

解决:linux eclipse 对‘dlopen’未定义的引用, 对‘xxx’未定义的引用

对静态成员的未定义引用

错误:未定义对...的引用有啥问题? [复制]

编译错误 未定义的引用 怎么回事