未定义对“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”的引用?的主要内容,如果未能解决你的问题,请参考以下文章