对 WinMain (C MinGW) 的未定义引用

新手上路,请多包涵

目前,我正在尝试使用 C++ 制作一个 Windows 应用程序。为了编译我的程序,我使用 MinGW (GCC)。但只要我使用 int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) 而不是 int main() 编译器就会向我显示以下消息:

C:/mingw-w64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x2e): undefined reference to `WinMain' collect2.exe: error: ld returned 1 exit status The terminal process terminated with exit code: 1

我尝试编译的示例代码来自此 Windows 应用程序教程: 示例代码

我已经尝试重新安装 MinGW,但没有帮助(我也在使用 Windows 10)。

原文由 wuzipu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4.2k
2 个回答

此示例代码使用 wWinMain 但是

需要注意的一点是,Visual C++ 支持“wWinMain”入口点,其中“lpCmdLine”参数是“LPWSTR”。您通常会为您的入口点使用“_tWinMain”预处理器定义并声明“LPTSTR lpCmdLine”,以便您可以轻松支持 ANSI 和 Unicode 构建。但是,MinGW CRT 启动库不支持 wWinMain,因此如果您需要访问命令行参数,则必须坚持使用标准的“WinMain”并使用“GetCommandLine()”。

通过 使用 MinGW 构建 Win32 GUI 应用程序

在这种特定情况下,您可以使用 WinMain 代替。 This program doesn’t use pCmdLine value, so it should compile when you change wWinMain to WinMain and PWSTR pCmdLine to PSTR pCmdLine .

如果您以后需要 unicode 命令行,请使用 LPWSTR cmd_line = GetCommandLineW(); 而不是 WinMain 参数。

Newer Mingw versions also support -municode linker option switching to alternate startup code allowing to use wWinMain instead of WinMain (or wmain instead of main )。将其添加到命令行、IDE 或 makefile 中的链接器选项。

 g++ other_options_and_arguments -municode

原文由 Daniel Sęk 发布,翻译遵循 CC BY-SA 4.0 许可协议

未定义对“WinMain”的引用

它试图找到 WinMain 并且失败了。所以你需要使用 WinMain 而不是 wWinMain

另一个可能的问题是

错误:C 函数 ‘int WinMain(HINSTANCE, HINSTANCE, PWSTR, int)’ 的声明冲突 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) ^~~~~~~ 在来自 c:\mingw 的文件中\include\windows.h:44:0, from test.cpp:5: c:\mingw\include\winbase.h:1263:14: 注意:先前的声明 ‘int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)’ int APIENTRY WinMain (HINSTANCE, HINSTANCE, LPSTR, int);

所以你需要使用 LPSTR 而不是 PWSTR

然后入口点将是这样的:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pCmdLine, int nCmdShow)

以上是 ANSI 版本入口点。

原文由 Rita Han 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题