c++ - MinGW.exe requiere algunos gcc dll sin importar el código?
(2)
Al compilar con MinGW, tengo que copiar ciertos archivos dll desde el directorio bin de MinGW antes de que se ejecute el exe (incluso cuando se usa "-static" y / o "-static-libstdc ++".) ¿Cómo puedo cambiar eso? ¿Hay alguna versión especial de MinGW que deba usar? En última instancia, quiero poder ejecutar el programa con nada más que el exe en el directorio (y no hay variables de entorno de Windows configuradas). Estos archivos son:
- libstdc ++ - 6.dll
- libgcc_s_seh-1.dll
- libwinpthread-1.dll
Y aquí está la lista completa de los pasos que estoy en barbecho:
- Open Up Code :: Blocks
- Seleccione "Archivo-> Nuevo-> Proyecto-> Consola"
- Complete la configuración del proyecto para el proyecto "Hola mundo"
- Haga clic derecho en Proyecto-> Opciones de compilación ...-> Hola mundo (objetivo raíz) -> Otras opciones
- Ingrese "-static" (o "-static-libstdc ++") bajo las "-fexcepciones" ya establecidas
- CTRL-F9: Proyecto de compilación (sin ejecución)
- Navegue hasta, en el Explorador de Windows, y ejecute el archivo "Hello World.exe" incorporado.
- Haga clic en "Aceptar" cuando aparece un mensaje emergente que dice "Error: libstdc ++ - 6.dll no se encuentra en su computadora".
- Copie "libstdc ++ - 6.dll" del directorio / MinGW / bin /, en el directorio "Hello World.exe".
- Ejecute "Hello World.exe"
- Haga clic en "Aceptar" para el mensaje que dice "Error: libgcc_s_seh-1.dll falta en su computadora".
- Copie "libgcc_s_seh-1.dll" en el directorio "Hello World.exe".
- Repite y termina copiando también "libwinpthread-1.dll".
Ver el mensaje
Hello World!
Editar: Mi línea de comando es:
g++.exe -Wall -fexceptions -static -static-libgcc -static-libstdc++ -g -static-libgcc -static-libstdc++ -L. -c "C:/Users/______/Desktop/Hello World/main.cpp" -o obj/Debug/main.o
g++.exe -o "bin/Debug/Hello World.exe" obj/Debug/main.o
Con todos los archivos dll mencionados anteriormente requeridos. Y, solo para estar seguro, el código es:
// main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
-static-libgcc
puede ser una mala idea si se usan excepciones. la documentación de opciones de enlace indica que
Hay varias situaciones en las que una aplicación debe usar el libgcc compartido en lugar de la versión estática. El más común de estos es cuando la aplicación desea arrojar y atrapar excepciones en diferentes bibliotecas compartidas. En ese caso, cada una de las bibliotecas, así como la propia aplicación, deberían usar el libgcc compartido.
Tus comandos están equivocados
Vaya al directorio donde está su archivo main.cpp y pruebe lo siguiente.
g++.exe -Wall -c -g main.cpp -o obj/Debug/main.o
g++.exe -static -static-libgcc -static-libstdc++ -o "bin/Debug/Hello World.exe" obj/Debug/main.o
entonces ya no necesitará copiar los archivos DLL (para su programa Hello World).
Otras notas:
Las instrucciones de instalación de MinGW recomiendan configurar
c:/minGW;c:/MinGW/bin;
a la variable de entorno PATH.
Normalmente el
-static -static-libgcc -static-libstdc++
Las opciones del enlazador deberían funcionar (prueba las 3 al mismo tiempo). Pero no para libwinpthread-1.dll
.
Además, intente clean
antes de volver a compilar.
No hay comando "-estático-algo".
Solo las bibliotecas estándar libgcc y libstdc ++ se pueden establecer en enlaces estáticos.
Para otras bibliotecas, primero cambia a la vinculación estática con "-static" y luego enumera las bibliotecas para incluirlas con comandos separados, es decir, "-lpthread".