w64 support para minimalist instalar for descargar compiler c++ windows cross-compiling mingw-w64

c++ - support - El punto de entrada del procedimiento__gxx_personality_sj0 no se pudo ubicar en...



mingw 32 bits (2)

Al final, resultó que el problema fue causado por un libstdc++-6.dll en algún lugar de $PATH . Después de asegurarse de que la copia construida por Mingw-w64 estaba en el directorio de la aplicación, todo funcionó.

He logrado (de alguna manera) compilar de forma cruzada Qt5 con el compilador del Proyecto Mingw-w64 para Windows de 32 bits. Todas las bibliotecas se han instalado en ~/i686-w64-mingw32 .

Tengo un proyecto Qt basado en CMake que estoy tratando de compilar de forma cruzada. Siguiendo estas instrucciones , he podido compilar el proyecto. Hasta ahora tan bueno.

Desafortunadamente, al ejecutar el binario resultante en Windows, obtengo un error:

"El punto de entrada del procedimiento __gxx_personality_sj0 no se pudo ubicar en la biblioteca de enlaces dinámicos [nombre_de_aplicación] .exe"

* [application_name] es la ruta completa al ejecutable principal

He escuchado que este tipo de problema a veces puede deberse a la mezcla de bibliotecas compiladas con diferentes versiones de MinGW. Pero todo en esta máquina (todas las bibliotecas y el ejecutable) ha sido compilado por el mismo compilador (la cadena de herramientas i686-w64-mingw32 ).

Además, me parece extraño que el error se queje de que falta el punto de entrada del ejecutable de la aplicación en lugar de uno de los archivos .dll .

¿Qué podría causar este error y qué se puede hacer para remediarlo?


Encontrar la ubicación de la biblioteca incorrecta:

  • Abra el símbolo del sistema.
  • Escribe "libstdc ++ - 6.dll" y pulsa "Enter"
  • Debe aparecer un cuadro de mensaje con una ruta y un mensaje: c: / somefolder / someapp /.../ libstdc ++ - 6.dll. Este archivo no tiene un programa asociado con él, etc., etc. La ruta es la respuesta. .
  • La ejecución de su aplicación desde un IDE:% PATH% en IDE puede ser diferente del% PATH% en el símbolo del sistema (consulte la configuración de IDE). En ese caso, poner "libstdc ++ - 6.dll" en un archivo por lotes y ejecutar el lote desde el IDE debe mostrar qué instancia particular de la biblioteca está recogiendo su programa.

Mi solución personal:

  • Abra "Propiedades del sistema" -> "Variables de entorno" (en Windows 7, en mi caso) y asegúrese de que ambas variables% PATH% (la de su cuenta Y la variable de todo el sistema% PATH%) comiencen con c: / mingw / bin (o cualquier ruta que tenga para la biblioteca). Además, es posible que tenga que reiniciar su IDE para que retire el nuevo PATH.

En mi experiencia, la forma en que MS Windows elige la ubicación dentro de% PATH% puede ser muy errática. La última vez, agregué un archivo de origen con una sola función e incluí esa función en mi código. El programa siempre escogería el libstdc ++ - 6.dll incorrecto, incluso cuando eliminé todo el código de la función y dejé solo la declaración de "retorno". Cada vez que esa función fue comentada (excluida), el programa se ejecutaría normalmente nuevamente. Sospecho que a veces Windows elige PATH de "Variables del sistema" y evita las "Variables de usuario" PATH (el PATH de su cuenta de Windows) por algún motivo.