MINGW: Cómo desactivar 'Treat WChar_t Como Construido en Tipo' en g++ vinculando biblioteca compartida/dinámica

Construí las bibliotecas compartidas con MinGW y NO trato WChar_t como un tipo incorporado

#ifdef _NATIVE_WCHAR_T_DEFINED
    typedef wchar_t UShort; // Treat as Built In
#else
    typedef unsigned short UShort; // NOT treated as Built In
#endif

Al vincular las bibliotecas compartidas con un pequeño programa,

g++ -o helloworld main.cpp -I./include/. -L./lib - Yo... // Por defecto tratar WChar_t como un tipo incorporado y obtener el error de compilación (referencia no definida a `)

He comprobado las opciones de línea de comandos g+ https://man7.org/linux/man-pages/man1/g+.1.htmly también probó la opción siguiente

Con -procesado, predefinición de la línea de comandos y la mayoría Macros incorporados está deshabilitado. Macros como "LINE", que son contextualmente dependientes, se manejan normalmente. Esto permite recopilación de archivos previamente elaborados con "-E - sólo fdirectives".

Pero no tener éxito, el error permanece.

Pregunta hecha hace 3 años, 5 meses, 0 días - Por codecraftsman32c9


3 Respuestas:

  • Al establecer la bandera -D_NATIVE_WCHAR_T_DEFINED=OFF funciona.

    g++ -D_NATIVE_WCHAR_T_DEFINED=OFF -o holaworld main.cpp -I./include/. -L./lib - Yo...

    Gracias.

    Respondida el Dec 16, 2020 a las 20:46 - por syntaxsavvy

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando se encuentra en la configuración de tratamiento de wchar_t como un tipo incorporado al compilar tus bibliotecas compartidas con MinGW, mientras que estás intentando compilar un programa que no considera wchar_t como un tipo incorporado. Para resolver este problema, puedes intentar lo siguiente:

    • Agregar una opción de compilación adicional al compilar tu programa principal: Al compilar tu programa principal, puedes agregar la opción `-fno-builtin-wchar-t` para indicarle a `g++` que no trate `wchar_t` como un tipo incorporado. Esto debería asegurar que el programa principal y las bibliotecas compartidas estén alineados en cuanto al tratamiento de `wchar_t`.
    • Recompilar tus bibliotecas compartidas sin el tratamiento de `wchar_t` como tipo incorporado: Puedes volver a compilar tus bibliotecas compartidas sin definir `_NATIVE_WCHAR_T_DEFINED`, de manera que `wchar_t` no se trate como un tipo incorporado.
    • Verificar la compatibilidad entre las opciones de compilación de las bibliotecas compartidas y del programa principal: Asegúrate de que todas las opciones de compilación que afectan el tratamiento de `wchar_t` estén configuradas de la misma manera tanto en las bibliotecas compartidas como en tu programa principal.

    Es importante ser consistente en la configuración del tratamiento de wchar_t en todas las partes de tu proyecto para evitar errores de compilación como el que estás experimentando. Espero que estas sugerencias te ayuden a resolver el problema. ¡Buena suerte!

    Respondida el Dec 17, 2020 a las 20:49 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para desactivar el tratamiento de wchar_t como un tipo incorporado en g++ al vincular bibliotecas compartidas/dinámicas construidas con MinGW, puedes utilizar la siguiente opción de línea de comandos:

    
    
    • fno-builtin-wchar_t

    Esta opción indica al compilador que no trate wchar_t como un tipo incorporado y que busque su definición en las bibliotecas vinculadas.

    Además, asegúrate de que estás utilizando la versión correcta de g++ para MinGW. La versión predeterminada de g++ en MinGW puede no admitir la opción -fno-builtin-wchar_t. Puedes descargar la última versión de MinGW desde el sitio web oficial: https://sourceforge.net/projects/mingw/

    Aquí tienes un ejemplo de cómo utilizar la opción -fno-builtin-wchar_t al vincular tu programa:

    
    g++ -o helloworld main.cpp -I./include/. -L./lib -fno-builtin-wchar_t
    

    Esto debería resolver el error de referencia no definida a wchar_t.

    Respondida el Dec 17, 2020 a las 20:55 - por Gemini

    Votos positivos: 0 | Votos negativos: 0