2011-06-09 9 views
9

Estoy compilando mi biblioteca para la exportación como una biblioteca compartida utilizando MinGW (GCC 4.5.0). Hago esto mediante la compilación de todos los archivos de origen utilizando HAZ comandos similares a:Mingw acumulación - depende de DLL no es nativo de ventanas

gcc -shared -c mysource.cpp -o mysource.o 

Y, por último:

gcc -shared -lstdc++ -lm -lws2_32 mysource.o -o mylib.dll 

Cuando hago un paseo dependencia de mi archivo de salida (usando http://www.dependencywalker.com/ por ejemplo), veo que hay 3 dependencias:

KERNEL32.dll 
MSVCRT.dll 
LIBSTDC++-6.DLL 

tener mi DLL dependen de los archivos que no se incluyen con windows es subóptimo para mi objetivo final.

¿Hay alguna manera de configurar el sistema de modo que el resultado final (DLL) SOLO depende de KERNEL32 y MSVCRT?

Respuesta

6

La bandera -static puede ser lo que estás buscando. (Todavía se ve divertido para mí utilizar tanto -static y -shared en la misma línea, pero no son opuestos.)

Si desea utilizar g++ como conductor en lugar de gcc, se podría utilizar en su lugar la bandera -static-libstdc++.

+0

Esto funcionó. Construyo utilizando la opción -shared y vinculo los tiempos de ejecución usando -static-libstdC++. –

1

Bueno, es exactamente lo que le dijo a su enlazador que ver con -lstdc++ ... quizás mover ese parámetro antes de la -shared y enlazar de nuevo. Que yo sepa, debería usar la versión estática de la versión estándar de C++.

Nota: Creo que también había una buena razón para preferir g ++ para los objetivos de C++ en lugar de utilizar gcc. Probablemente fue sobre la inclusión de la lib estándar de C++. No puedo recordarlo desde lo alto de mi cabeza. Además, no sé si MinGW difiere en ese caso.

Cuestiones relacionadas