c++ - para - mingw portable
El programa no puede iniciarse porque falta libgcc_s_dw2-1.dll (12)
He creado un programa simple en C ++ con Code :: Blocks.
Si lo ejecuto desde Code :: Blocks, funciona correctamente; pero si lo ejecuto haciendo doble clic en el archivo ejecutable, aparece una ventana con este mensaje:
El programa no puede iniciarse porque falta libgcc_s_dw2-1.dll en su computadora.
Intente reinstalar el programa para solucionar este problema.
¿Entonces, cuál es el problema? ¿Qué tengo que hacer para arreglarlo?
¿No puedes ponerlo en system32 o algo así como lo haces con otros archivos DLL, para que cada programa que intentes ejecutar no tenga ese problema en tu 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:
Extrae libgcc_s_dw2-1.dll a una ubicación en tu computadora. Le recomendamos que descomprima el archivo en el directorio del programa que está solicitando libgcc_s_dw2-1.dll.
Si eso no funciona, deberá extraer libgcc_s_dw2-1.dll en el directorio de su sistema. Por defecto, esto es:
- C: / Windows / System (Windows 95/98 / Me)
- C: / WINNT / System32 (Windows NT / 2000)
- C: / Windows / System32 (Windows XP, Vista, 7)
Si usa una versión de 64 bits de Windows, también debe colocar libgcc_s_dw2-1.dll en C: / Windows / SysWOW64 /
Asegúrese de sobrescribir cualquier archivo existente (pero haga una copia de seguridad del archivo original). Reinicie su computadora.
Si el problema persiste, intente lo siguiente:
- Abra el menú Inicio de Windows y seleccione "Ejecutar ...".
- Escriba CMD y presione Entrar (o si usa Windows ME, escriba COMMAND)).
- Escriba regsvr32 libgcc_s_dw2-1.dll y presione Entrar.
Agregar "-estático" a otras opciones del 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 se ha dado cuenta de esto en su sistema de desarrollo, debe verificar que tenga este conjunto si está conectando estáticamente.
Otra nota, copiar la DLL en la misma carpeta que el ejecutable no es una solución, ya que se anula la idea de vincular estáticamente.
Otra opción es usar la versión TDM de MinGW que resuelve este problema.
Agregue la ruta a esa dll en la variable de entorno PATH.
Code :: Blocks: agrega ''-static'' en settings-> compiler-> Linker settings-> Other linker options.
Copie "libgcc_s_dw2-1.dll" a donde estaba make.exe. (Si está utilizando Msys, cópielo en / msys / bin) Asegúrese de que la ruta de acceso a make.exe esté establecida en el env. PATH (si make.exe está en una carpeta "bin", lo más probable es que tenga msys, es / msys / bin) Compile, rund, debug, etc. happy.
Creo que esto es un problema de compilador MinGW / gcc, en lugar de una instalación de Microsoft Visual Studio.
libgcc_s_dw2-1.dll
debe estar en el directorio bin del compilador. Puede agregar este directorio a la variable de entorno PATH para vincular el tiempo de ejecución, o puede evitar el problema agregando "-static-libgcc -static-libstdc ++" a los indicadores del compilador.
Si planea distribuir el ejecutable, este último probablemente tenga más sentido. Si solo planea ejecutarlo en su propia máquina, cambiar la variable de entorno PATH es una opción atractiva (mantiene el tamaño del ejecutable).
Actualizado:
En base a los comentarios de Greg Treleaven (ver comentarios a continuación), agrego enlaces a:
[Captura de pantalla de Code :: Blocks "Opciones de compilación del proyecto"]
La última discusión incluye las opciones del enlazador -static-libgcc
y -static-libgcc
-static-libstdc++
.
En Eclipse, lo encontrará debajo de las propiedades del proyecto> C / C ++ Build> Configuración> MinGW C ++ Linker> Misc
Debe agregarlo a los "indicadores del enlazador" en la parte superior; en ningún otro lugar. Entonces solo reconstruye.
Descubrí que al vincularlos se explota estáticamente el tamaño hasta 1,400kb incluso con optimizaciones. Es 277kb más grande en comparación con simplemente copiar sobre los archivos DLL compartidos. Es 388kb más grande también 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 tienen instalados en otro lugar.
Encuentra ese dll en tu PC y copialo en el mismo directorio en el que se encuentra tu ejecutable.
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é que lo mencionaría :)
Simplemente vaya a Configuración >> Compilador y depurador, luego haga clic en la pestaña Configuración del enlazador y vaya al control de edición "Otras opciones del enlazador" y pegue: "-static-libgcc -static-libstdc ++", no hay opción de indicador del compilador en las opciones de Compiler Flags para Code :: Blocks, esa es la manera de resolver ese problema, vine aquí en busca de una solución también y el tipo que publicó sobre "-static-libgcc -static-libstdc ++" dio la idea correcta, y De alguna forma, me di cuenta de que todo estaba por accidente, pero funcionó, ahora se puede hacer clic en el archivo desde Code :: Blocks, funciona desde el escritorio.
Vaya al árbol de MingeW http sourceforge.net. En Inicio / MinGW / Base / gcc / Versión4 (o en cualquier versión que use) / gcc-4 (versión) / encontrará un archivo como gcc-core-4.8.1-4-mingw32-dll.tar.lzma . Extraelo y ve a la carpeta bin donde encontrarás tu libgcc_s_dw2-1.dll y otras dll. Copie y pegue lo que necesita en su directorio bin.
Ver also Solucionó mi problema.
Por cierto, ¿es definitivamente la bandera del compiler
? ¿Tal vez el linker
es el término más adecuado aquí?