Gerando um executável do Linux com o Mono com o mkbundle

3

Um arquivo C # em mono pode ser compilado usando o comando gmcs . Isso criará um arquivo hello.exe .

$ gmcs hello.cs
$ ls
hello.cs  hello.exe
$ ./hello.exe
Hello from Mono!

Para gerar um executável do Linux, eu tentei este comando, mas ele gerou o erro:

$ gmcs /t:exe hello.cs /out:hello

Unhandled Exception: System.ArgumentException: Module file name 'hello' must have file extension.

Eu quero criar um executável independente para que eu possa executá-lo. Basta executá-lo dizendo e recebo a saída desejada:

$ ./hello
Hello from Mono!

Eu pesquisei e encontrei uma solução que menciona uma ferramenta chamada mkbundle :

$ 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 Mono. Descobri que isso está disponível em mono-devel package. Instalar este pacote significava instalar cerca de 82 outros pacotes. Meu objetivo era manter minha instalação mono mínima até algum dia.

Existe uma maneira de instalar mkbundle standalone?

    
por Animesh 16.04.2012 / 12:56

1 resposta

1

Eu estava muito impaciente e senti que o pacote mono-2.0-devel poderia ter mkbundle. Então, fui em frente e instalei o mono-2.0-devel , que precisava de apenas 18 pacotes adicionais. Quando eu digitei mkb e cliquei na guia, ele me mostrou mkbundle2 .

Eu 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!

Isso era o que eu precisava em primeiro lugar.

Graças à ferramenta command-not-found .

    
por 16.04.2012 / 13:28