wuz*_*ipu 11 c++ winapi mingw winmain mingw32
目前我正在尝试使用 C++ 制作一个 Windows 应用程序。为了编译我的程序,我使用 Mingw GCC。顺便说一句,我在 Windows 10 上。但是一旦我使用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):未定义对`WinMain' collect2.exe的引用:错误:ld返回1退出状态终端进程因退出而终止代码:1
我尝试编译的示例代码来自此 Windows 应用程序教程: 示例代码
我已经尝试重新安装 mingw 但它没有帮助。这就是为什么我希望这里有人可以帮助我解决我的问题。先感谢您!
Bas*_*asj 16
解决方案是添加-municode编译参数,如 @ssbssa 在评论中提到的。(与此同时,已接受的答案已更新,并确认了这一点)。
例子:
g++ helloworld3.cpp -o helloworld3 -Wl,-subsystem,windows -municode
Run Code Online (Sandbox Code Playgroud)
请参阅https://sourceforge.net/p/mingw-w64/wiki2/Unicode%20apps/
虽然编译上述代码不需要定义 _UNICODE 或 UNICODE,但需要 -municode 进行链接,因为它使用 wmain() 而不是传统的 main()。
此示例代码使用wWinMain但
需要注意的一件事是,Visual C++ 支持“wWinMain”入口点,其中“lpCmdLine”参数是“LPWSTR”。您通常会使用“_tWinMain”预处理器定义作为入口点并声明“LPTSTR lpCmdLine”,以便您可以轻松支持 ANSI 和 Unicode 构建。但是,MinGW CRT 启动库不支持 wWinMain,因此如果您需要访问命令行参数,则必须坚持使用标准的“WinMain”并使用“GetCommandLine()”。
在这种特定情况下,您可以WinMain改用。这个程序不使用pCmdLine的值,所以当你改变它应编译wWinMain到WinMain和PWSTR pCmdLine到PSTR pCmdLine。
如果您以后需要使用 unicode 命令行LPWSTR cmd_line = GetCommandLineW();而不是WinMain参数。
较新的 Mingw 版本还支持-municode链接器选项切换到备用启动代码,允许使用wWinMain代替WinMain(或wmain代替main)。将它添加到命令行、IDE 或 makefile 中的链接器选项。
g++ other_options_and_arguments -municode
Run Code Online (Sandbox Code Playgroud)