Creo que este es un problema del compilador MinGW / gcc, en lugar de una configuración de Microsoft Visual Studio.
El libgcc_s_dw2-1.dll
debe estar en el directorio bin del compilador. Puede agregar este directorio a su variable de entorno PATH para vinculación en tiempo de ejecución, o puede evitar el problema agregando "-static-libgcc -static-libstdc ++" a sus indicadores de compilación.
Si planea distribuir el ejecutable, este último probablemente tenga más sentido. Si solo planea ejecutarlo en su propia máquina, el cambio de la variable de entorno PATH es una opción atractiva (mantiene bajo el tamaño del ejecutable).
Actualizado:
Según los comentarios de Greg Treleaven (ver comentarios a continuación), agrego enlaces a:
[Captura de pantalla de Code :: Blocks "Project build options"]
[Opciones de enlace GNU gcc]
La última discusión incluye -static-libgcc
y -static-libstdc++
opciones de enlace.
En Eclipse, lo encontrará en las propiedades del proyecto> C / C ++ Build> Configuración> MinGW C ++ Linker> Misc
Debe agregarlo a las "banderas de enlace" en la parte superior; en ningún otro lugar. Entonces solo reconstruir.
He descubierto que vincularlos explota estáticamente el tamaño de hasta 1.400 kb incluso con optimizaciones. Es 277kb más grande en comparación con solo copiar sobre las DLL compartidas. También es 388kb más grande después de UPXing todo. Muy perder / perder aquí. Simplemente incluya los archivos DLL ya que el usuario final puede decidir eliminarlos o no si los tiene instalados en otro lugar.
fuente
Código :: Bloques: agregue '-static' en configuración-> compilador-> Configuración de enlazador-> Otras opciones de enlazador.
fuente
Busque ese archivo DLL en su PC y cópielo en el mismo directorio en el que se encuentra su ejecutable.
fuente
Ver también . Resolvió mi problema.
Por cierto, ¿es definitivamente
compiler
bandera? Tal vezlinker
es el término más adecuado aquí?fuente
Copie "libgcc_s_dw2-1.dll" en el lugar donde make.exe es. (Si está utilizando Msys, cópielo en \ msys \ bin) Asegúrese de que la ruta a make.exe esté configurada en el entorno. RUTA (si make.exe está en una carpeta "bin", muy probablemente, y tiene msys, es \ msys \ bin) Compilar, rund, depurar, etc. feliz.
fuente
Vaya al árbol MinGW http sourceforge.net. En Inicio / MinGW / Base / gcc / Version4 (o cualquier versión que se use) / gcc-4 (versión) / encontrará un archivo como gcc-core-4.8.1-4-mingw32-dll.tar.lzma . Extraiga y vaya a la carpeta bin donde encontrará su libgcc_s_dw2-1.dll y otros dll. Copie y pegue lo que necesita en su directorio bin.
fuente
Pude superar esto usando "gcc" en lugar de "g ++" para mi compilador. Sé que esta no es una opción para la mayoría de las personas, pero pensé en mencionarla como una opción alternativa :)
fuente
¿No puede ponerlo en system32 o algo así como lo hace con otros archivos dll, para que cada programa que intente ejecutar no tenga ese problema en su máquina?
Solo necesito el camino donde ponerlo.
Es un poco molesto ponerlo en el directorio cada vez que ejecuto un programa que acabo de construir ...
Editar: encontré la solución:
fuente
Simplemente vaya a Configuración >> Compilador y depurador, luego haga clic en la pestaña Configuración del vinculador y vaya al control de edición "Otras opciones del vinculador" y pegue: "-static-libgcc -static-libstdc ++", no hay ninguna opción de indicador del compilador en las opciones de Compiler Flags para Code :: Blocks, así que esa es la forma de resolver ese problema, vine aquí buscando una solución también y el tipo que publicó sobre "-static-libgcc -static-libstdc ++" dio la idea correcta, y Me di cuenta del resto por accidente, pero funcionó, ahora se puede hacer clic en el archivo desde fuera de Code :: Blocks, funciona directamente desde el escritorio.
fuente
Agregue la ruta a ese dll en la variable de entorno PATH.
fuente
Incluyendo -static-libgcc en la línea de compilación, resuelve el problema
De acuerdo con: @hardmath
También puede crear un alias en su perfil [.profile] si está en MSYS2, por ejemplo
Ahora su comando GCC también pasa ;-)
fuente
Agregar "-static" a otras opciones de enlazador resuelve este problema. Estaba teniendo el mismo problema después de probar esto en otro sistema, pero no por mi cuenta, por lo que incluso si no lo ha notado en su sistema de desarrollo, debe verificar que tenga este conjunto si está vinculando estáticamente.
Otra nota, copiar la DLL en la misma carpeta que el ejecutable no es una solución, ya que anula la idea de vincular estáticamente.
Otra opción es usar la versión TDM de MinGW que resuelve este problema.
Edición de actualización: esto puede no resolver el problema para todos. Otra razón que descubrí recientemente para esto es cuando usa una biblioteca compilada por otra persona, en mi caso fue SFML que se compiló incorrectamente y, por lo tanto, requería una DLL que no existía, ya que se compiló con una versión diferente de MinGW de la que yo utilizar. Utilizo una compilación enana, esta usó otra, así que no tenía la DLL en ningún lado y, por supuesto, no la quería, ya que era una compilación estática. La solución puede ser encontrar otra compilación de la biblioteca o compilarla usted mismo.
fuente
Al trabajar con msys2, obtuve el mismo error al intentar ejecutar la versión de lanzamiento de mi proyecto en un entorno de depuración. La solución para mi problema es obvia: usar ejecutable con símbolos de depuración.
fuente
En CodeBlocks puede ir a Configuración ... Compilador ... y elegir 1) los dos elementos en el cuadro azul o 2) el único elemento en el cuadro verde
fuente
Si se pregunta dónde puede descargar la biblioteca compartida (aunque esto no funcionará en los dispositivos de su cliente a menos que incluya el dll) aquí está el enlace: https://de.osdn.net/projects/mingw/downloads/72215/ libgcc-9.2.0-1-mingw32-dll-1.tar.xz /
fuente