2011-09-04 14 views
6

¿Hay suites gratuitas compatibles con GCC para Windows que generan ejecutables independientes sin dependencias externas?Paquete de compilador de Windows GNU sin dependencias externas

Aquí están algunos que no encajan en el proyecto de ley, ordenada por inconveniencia, menos a más:

  • MinGW (MSVCRT.DLL)
  • Cygwin (DLL de tiempo de ejecución de Cygwin)
  • DJGPP (NTVDM .EXE; no presente en las plataformas x64)

En este momento me estoy inclinando hacia (y utilizando, aunque de manera tentativa,) MinGW, ya que parece ser el "más limpio" enfoque. Todavía no estoy entusiasmado con la dependencia MSVCRT.DLL, especialmente porque puedo y tengo que tratar con clientes que ejecutan pre-Win2K. (Windows 2000 fue la primera edición en enviar con MSVCRT.DLL) La distribución de MSVCRT con la aplicación no es una opción.

P.S .: Soy consciente de que hay un intento de crear un reemplazo MSVCRT para MinGW, pero todavía es inestable/beta, y tiene una funcionalidad limitada; no es algo que me gustaría usar para aplicaciones de producción.

P.P.S .: Las respuestas al efecto de "MSCVRT generalmente está allí de todos modos" o "Solo empaqueta la redistribución" no son respuestas constructivas. La pregunta específicamente pregunta cómo EVITAR dependencias, no asegurar su presencia.

+1

Se supone que MSVCRT se instaló como parte de la redistribución. Incluso las herramientas de Microsoft tienen este límite al vincular el tiempo de ejecución como una DLL en lugar de estáticamente. –

+0

Pregunta relacionada: http://stackoverflow.com/questions/3943412/can-i-link-msvcrt-statically-with-mingw –

+0

Con mingw, ¿no puede vincular estáticamente con las bibliotecas estáticas desde la plataforma SDK? –

Respuesta

9

Para evitar MSVCRT con MinGW, utilice los siguientes banderas para el enlazador:

-nostdlib -Wl,--exclude-libs,msvcrt.a -Wl,-eWinMain 

Tenga en cuenta que usted tiene que declarar una función llamada WinMain (también se puede elegir otro nombre para él) que será su main . Tampoco puede usar ninguna de las funciones estándar como strlen, printf y sus amigos. En su lugar, debe utilizar los equivalentes WinAPI como lstrcmp, wsprintf, etc.

Se puede ver un ejemplo de esto usando SCons en:

http://nsis.svn.sourceforge.net/viewvc/nsis/NSIS/trunk/SCons/Config/gnu?revision=6160&view=markup

he utilizado esto para mi proyecto que también requiere Compatibilidad con Windows 9x Esto también tiene el agradable efecto secundario de tener ejecutables más pequeños. De tus comentarios anteriores, parece que estás buscando eso también. Si ese es el caso, hay incluso más trucos que puedes usar en el archivo que he vinculado anteriormente.

Microsoft tiene unas funciones CRT de sobremesa a API de Windows en la siguiente KB:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q99456

Más información en deshacerse de CRT (aunque para VC, todavía puede ayudar) en:

http://www.catch22.net/tuts/minexe

+1

Me hubiera gustado ver más a lo largo de las líneas de enlace estático con libcmt.lib también, pero una buena respuesta, no obstante. – Unsigned

+1

Impresionante, no intenté esto todavía pero he estado buscando esta información, ¡la gente incluso dijo que mi pregunta sobre esto era un duplicado! http://stackoverflow.com/questions/23218931/build-mingw-console-application-without-crt?lq=1 – paulm

Cuestiones relacionadas