当我尝试使用Eclipse CDT
构建程序时,出现以下错误:
/mingw/lib/libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `WinMain@16
为什么会出现这个错误?如何解决这个问题?
当我尝试使用Eclipse CDT
构建程序时,出现以下错误:
/mingw/lib/libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `WinMain@16
为什么会出现这个错误?如何解决这个问题?
当链接器找不到WinMain
函数时,就会出现这个错误,因此很可能是缺失了该函数。在您的情况下,您可能也缺少了main
函数。
考虑以下Windows API级别的程序:
#define NOMINMAX
#include <windows.h>
int main()
{
MessageBox( 0, "Blah blah...", "My Windows app!", MB_SETFOREGROUND );
}
现在我们使用GNU工具链(即g++)构建它,无需特殊选项。这里的gnuc只是我用来提供选项以使g++更加标准的批处理文件。main
或winmain
是什么意思?谢谢 - Simplicitymain
函数。你需要在你的程序中加入它(但是需要添加其他内容)。或者你可以使用非标准的微软WinMain
,但是你必须要有其中之一,并且文件需要被包含在项目中。 - Cheers and hth. - Alf总结上述Cheers、hth和Alf的帖子。确保您已经定义了main()
或WinMain()
,并且g++应该会做正确的事情。
我的问题是main()
无意中被定义在命名空间内。
basic.start.main
- “它的类型应该具有C++语言链接,并且它应该具有已声明类型为整数型的返回类型,但除此之外,其类型是由实现定义的。” - 因此,如果您需要使用C链接,则可能存在问题。 - Ted Lyngmo在使用SDL编译我的应用程序时,我遇到了这个错误。这是由于SDL在SDL_main.h中定义了自己的main函数所致。为了防止SDL定义main函数,必须在包含SDL.h头文件之前定义一个SDL_MAIN_HANDLED宏。
在编译之前尝试保存你的.c文件。我相信你的电脑正在引用一个没有内容的文件路径。
我的情况是我没有主函数。
我也遇到了同样的问题。为了解决它,我在构建之前点击保存来保存我的.c文件。我相信我的电脑正在引用一个没有信息的文件路径。
检查项目中是否包含所有文件:
我在更新cLion后遇到了同样的错误。经过数小时的调试,我注意到我的一个文件未被包含在项目目标中。将其添加回活动项目后,我不再收到winmain16未定义的引用错误,并且代码编译成功。
编辑:还值得检查IDE中的构建设置。
(不确定此错误是否与最近更新IDE有关 - 可能是因果关系或简单相关性。欢迎评论任何有关该因素的见解!)