Saltar al contenido

Referencia indefinida a WinMain (C++ Mingw)

Nuestro equipo de expertos pasados algunos días de investigación y de juntar de información, hemos dado con la respuesta, esperamos que te sea de utilidad para tu trabajo.

Solución:

Este código de ejemplo utiliza wWinMain pero

Una cosa a tener en cuenta es que Visual C++ admite un punto de entrada “wWinMain” donde el parámetro “lpCmdLine” es un “LPWSTR”. Por lo general, usaría la definición de preprocesador “_tWinMain” para su punto de entrada y declararía “LPTSTR lpCmdLine” para que pueda admitir fácilmente compilaciones ANSI y Unicode. Sin embargo, la biblioteca de inicio MinGW CRT no es compatible con wWinMain, por lo que tendrá que ceñirse al estándar “WinMain” y usar “GetCommandLine()” si necesita acceder a los argumentos de la línea de comandos.

a través de la creación de aplicaciones GUI Win32 con MinGW

En este caso específico, puede utilizar WinMain en cambio. Este programa no utiliza pCmdLine valor, por lo que debe compilar cuando cambie wWinMain a WinMain y PWSTR pCmdLine a PSTR pCmdLine.

Si más tarde necesitaría usar la línea de comando Unicode LPWSTR cmd_line = GetCommandLineW(); en vez de WinMain argumento.

Las versiones más recientes de Mingw también admiten -municode la opción del enlazador cambia a un código de inicio alternativo que permite usar wWinMain en vez de WinMain (o wmain en vez de main). Agréguelo a su línea de comando, opciones del enlazador en IDE o makefile.

g++ other_options_and_arguments -municode

referencia indefinida a ‘WinMain’

trata de encontrar WinMain y falló Entonces necesitas usar WinMain en vez de wWinMain.

Otro problema posible es

error: declaración en conflicto de la función C ‘int WinMain(HINSTANCE, HINSTANCE, PWSTR, int)’ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) ^~~~~~~ En archivo incluido desde c:mingw includewindows.h:44:0, from test.cpp:5: c:mingwincludewinbase.h:1263:14: nota: declaración anterior ‘int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)’ int APIENTRY WinMain (HINSTANCE, HINSTANCE, LPSTR, int);

Entonces necesitas usar LPSTR en vez de PWSTR.

Entonces el punto de entrada tendrá este aspecto:

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

Arriba está el punto de entrada de la versión ANSI.

La solución es agregar -municode a los parámetros de compilación, como lo menciona @ssbssa en un comentario. (Mientras tanto, la respuesta aceptada se ha actualizado y lo confirma).

Ejemplo:

g++ helloworld3.cpp -o helloworld3 -Wl,-subsystem,windows -municode

Consulte https://sourceforge.net/p/mingw-w64/wiki2/Unicode%20apps/

Si bien no es necesario definir _UNICODE o UNICODE para compilar el código anterior, se necesita -municode para vincular porque usa wmain() en lugar del tradicional main().

Calificaciones y reseñas

Te invitamos a asistir nuestra investigación mostrando un comentario o puntuándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *