
Файл AC# в mono можно скомпилировать с помощью 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 других пакетов. Моей целью было сохранить мою установку Mono минимальной до определенного момента.
Есть ли способ установить его 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
.