mkbundle を使って Mono で Linux 実行ファイルを生成する

mkbundle を使って Mono で Linux 実行ファイルを生成する

mono の C# ファイルは、コマンドを使用してコンパイルできますgmcs。これにより、ファイルが作成されますhello.exe

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

Linux 実行可能ファイルを生成するために、次のコマンドを試しましたが、エラーが発生します:

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

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

スタンドアロンの実行可能ファイルを作成して、次のように実行するだけで実行でき、目的の出力が得られるようにします。

$ ./hello
Hello from Mono!

検索して見つけた解決策には、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

このユーティリティは、私の Mono インストールには存在しないようです。これはmono-develパッケージで利用できることがわかりました。このパッケージをインストールするには、約 82 個の他のパッケージをインストールする必要がありました。私の目標は、しばらくの間、Mono インストールを最小限に抑えておくことでした。

mkbundleスタンドアロンでインストールする方法はありますか?

答え1

私は非常に焦っていたので、パッケージにmono-2.0-develmkbundle が含まれているかもしれないと感じました。そこで、先に進んで、mono-2.0-devel必要な追加パッケージが 18 個だけであるインストールを実行しました。入力してmkbタブを押すと、 と表示されましたmkbundle2

私は試した:

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

そもそもこれが私に必要だったのです。

ツールに感謝しますcommand-not-found

関連情報