Gerando um executável Linux com Mono com mkbundle

Gerando um executável Linux com Mono com mkbundle

O arquivo AC# em mono pode ser compilado usando gmcso comando. Isso criará um hello.exearquivo.

$ 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-develpacote. 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 mkbundlede forma independente?

Responder1

Fiquei muito impaciente e senti que o pacote mono-2.0-develpoderia ter mkbundle. Então fui em frente e instalei mono-2.0-develo que precisava de apenas 18 pacotes adicionais. Quando digitei mkbe 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-foundferramenta.

informação relacionada