O arquivo AC# em mono pode ser compilado usando gmcs
o comando. Isso criará um hello.exe
arquivo.
$ gmcs hello.cs
$ ls
hello.cs hello.exe
$ ./hello.exe
Hello from Mono!
Para gerar um executável Linux, tentei este comando, mas gera o erro:
$ gmcs /t:exe hello.cs /out:hello
Unhandled Exception: System.ArgumentException: Module file name 'hello' must have file extension.
Quero criar um executável independente para poder executá-lo, basta executá-lo dizendo e obtenho a saída desejada:
$ ./hello
Hello from Mono!
Pesquisei e encontrei uma solução que menciona uma ferramenta chamadamkbundle:
$ 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
Este utilitário parece não existir na minha instalação do Mono. Descobri que isso está disponível no mono-devel
pacote. Instalar este pacote significou instalar cerca de 82 outros pacotes. Meu objetivo era manter minha instalação mono mínima até algum momento.
Existe uma maneira de instalar mkbundle
de forma independente?
Responder1
Fiquei muito impaciente e senti que o pacote mono-2.0-devel
poderia ter mkbundle. Então fui em frente e instalei mono-2.0-devel
o que precisava de apenas 18 pacotes adicionais. Quando digitei mkb
e apertei tab, ele me mostrou mkbundle2
.
Tentei:
$ 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!
Era disso que eu precisava em primeiro lugar.
Graças à command-not-found
ferramenta.