使用 Mono 和 mkbundle 生成 Linux 可执行文件

使用 Mono 和 mkbundle 生成 Linux 可执行文件

mono 中的 AC# 文件可以使用命令编译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!

我搜索并找到了一个解决方案,其中提到了一个名为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

我的 Mono 安装中似乎不存在该实用程序。我发现这个可以在mono-devel包装中找到。安装此软件包意味着安装大约 82 个其他软件包。我的目标是在某个时候保持我的单声道安装最小化。

有没有办法mkbundle独立安装?

答案1

我很不耐烦,觉得包里mono-2.0-devel可能有mkbundle。所以我继续安装,mono-2.0-devel只需要 18 个额外的软件包。当我输入mkb并点击 Tab 时,它显示了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工具。

相关内容