2010-09-03 16 views
8

Quiero hacer un exe independiente con cygwin. Tengo dos opciones:Compile independiente exe con Cygwin

  1. staticly enlace cygwin1.dll
    Si puedo enlazar estáticamente cygwin1.dll, entonces yo puede conseguir a un EXE independiente.

  2. cygwin1.dll de mezcla con myprog.exe
    Si puede combinar cygwin1.dll con mi programa, la puedo conseguir un exe independiente.

No sugiero que use IlMerge. Esto no funcionará porque no compilé mi programa con .NET.

¿Alguna de estas opciones es posible? Si no, ¿hay algo que sea posible con este dilema? Gracias!

+0

Supongo que realmente necesita servicios de CYGWIN.DLL, y simplemente usar -Mno-cygwin (o MinGW) no funcionará para usted? – RBerteig

+0

No lo sé. Estoy usando GCJ, pero no pude conseguir el GCJ que vino con mingw para funcionar. –

Respuesta

3

Veo dos posibilidades que podría considerar razonables. Uno sería construir un stub ejecutable con un compilador diferente (por ejemplo, MinGW, lo que sea, para que no necesite cygwin) para descomprimir el ejecutable principal y cygwin.dll en un directorio temporal, y luego generar ese ejecutable. Para distribuir solo un ejecutable, desearía agregar el ejecutable principal y cygwin.dll al "resguardo" como recursos binarios. Es un poco feo, pero bastante sencillo.

La alternativa sería tomar el source to cygwin y compilarlo como una biblioteca estática. Al menos en teoría, esto debería ser más limpio, pero también indudablemente es más trabajo. Conseguir que se construya como un código puramente estático en lugar de una DLL casi con seguridad tomará algún trabajo, aunque es difícil adivinar cuánto. Simplemente navegando un poco, parece bastante improbable que vaya a ser un trabajo rápido de un par de horas, o algo por el estilo (a menos que haya algo allí que eché de menos que ya sea compatible con la construcción estática, por supuesto).

3

Pruebe pasar -mno-cygwin como un compilador y un indicador de enlazador. Si los requisitos de su programa son lo suficientemente simples, esto evitará depender de las bibliotecas de Cygwin y crear un EXE independiente.

+1

Otras publicaciones indican que esto ya no funciona, por el bien de lectores más recientes. La función ahora está en desuso. – eewanco

1

Respuesta más precisa de Jerry.

¡El procedimiento descrito a continuación debe ser confrontado con sus derechos y la ley de licencias! Sé que puede funcionar, pero los derechos para distribuir el resultado (o incluso realizar el procedimiento) pueden estar limitados por la licencia de Cygwin (y creo que sí). Esto es debido a que su aplicación aún se refieren a Cygwin (a pesar de que es inútil - pero todavía está en su aplicación)

Asumir hello.exe es el nombre de su gran aplicación compilada bajo Cygwin en el directorio gran proyecto C:\xxx\yyy\zzz\

En la consola Cygwin ir a C:\xxx\yyy\zzz y escriba

objdump -p hello.exe | grep "DLL Name" 

Se puede obtener todas las DLL que utiliza su aplicación. Luego copie C:\xxx\yyy\zzz en todas las DLL enumeradas y específicas para cygwin.

Tenga en cuenta que su aplicación puede invocar otras aplicaciones (utilizando la función exec, por ejemplo) --- encuentre las aplicaciones de bibliotecas que usen y copien estas bibliotecas, así como también estas aplicaciones - en C:\xxx\yyy\zzz.

Quizás deba recompilar su proyecto con la opción del tipo -L C:\xxx\yyy\zzz o menos.Mira todos los otros caminos en tus fuentes.

Por lo tanto, su aplicación se vuelve independiente de la instalación de Cygwin y puede presentar su funcionalidad para/compartirla con ---- otros usuarios de Windows sin Cygwin. Pero, una vez más, le señalo y le pregunto, ¡tenga en cuenta la licencia y la ley adecuadas de los creadores de Cygwin y obsérvelos!

Cuestiones relacionadas