El archivo AC# en mono se puede compilar mediante gmcs
el comando. Esto creará un hello.exe
archivo.
$ gmcs hello.cs
$ ls
hello.cs hello.exe
$ ./hello.exe
Hello from Mono!
Para generar un ejecutable de Linux, probé este comando, pero genera el error:
$ gmcs /t:exe hello.cs /out:hello
Unhandled Exception: System.ArgumentException: Module file name 'hello' must have file extension.
Quiero crear un ejecutable independiente para poder ejecutarlo, simplemente ejecútelo diciendo y obtengo el resultado deseado:
$ ./hello
Hello from Mono!
Busqué y encontré una solución que menciona una herramienta llamadapaquete mk:
$ mkbundle -o hello hello.exe --deps
Sources: 1 Auto-dependencies: True
embedding: /home/ed/Projects/hello_world/hello.exe
embedding: /mono/lib/mono/1.0/mscorlib.dll
Compiling:
as -o /tmp/tmp54ff73e6.o temp.s
cc -o hello -Wall temp.c `pkg-config --cflags --libs mono` /tmp/tmp54ff73e6.o
Done
$ ls -l
total 3
-rwxr-xr-x 1 ed users 1503897 2005-04-29 11:07 hello
-rw-r--r-- 1 ed users 136 2005-04-29 11:06 hello.cs
-rwxr-xr-x 1 ed users 3072 2005-04-29 11:06 hello.exe
Esta utilidad no parece existir en mi instalación de Mono. Descubrí que esto está disponible en mono-devel
paquete. Instalar este paquete significaba instalar alrededor de otros 82 paquetes. Mi objetivo era mantener mi instalación mono al mínimo hasta algún momento.
¿Hay alguna forma de instalarlo mkbundle
de forma independiente?
Respuesta1
Estaba muy impaciente y sentí que el paquete mono-2.0-devel
podría tener mkbundle. Así que seguí adelante e instalé mono-2.0-devel
el cual solo necesitaba 18 paquetes adicionales. Cuando escribí mkb
y presioné la pestaña, me mostró mkbundle2
.
Lo intenté:
$ mkbundle2 -o hello hello.exe --deps
OS is: Linux
Sources: 1 Auto-dependencies: True
embedding: /home/minato/Projects/Practice/mono/hello.exe
embedding: /usr/lib/mono/2.0/mscorlib.dll
Compiling:
as -o temp.o temp.s
cc -ggdb -o hello -Wall temp.c `pkg-config --cflags --libs mono` temp.o
Done
$ ls
hello hello.cs hello.e hello.exe
$ ./hello
Hello from Mono!
Esto era lo que necesitaba en primer lugar.
Gracias a la command-not-found
herramienta.