මම C # ඉගෙන ගන්නවා, ඒ නිසා මම කුඩා C # වැඩසටහනක් සාදා Hello, World!
, පසුව එය සම්පාදනය කර එය සමඟ mono-csc
ධාවනය කළෙමි mono
:
$ mono-csc Hello.cs
$ mono Hello.exe
Hello, World!
මම ගැටීමෙන් බව දැක TAB
තුළ bash
, Hello.exe
ක්රියාත්මක සලකුණු කරන ලදී. ඇත්ත වශයෙන්ම, එය ක්රියාත්මක වන්නේ ගොනු නාමය පටවන කවචයකින් පමණි!
Hello.exe
ය නොවන අපූරු ගොනු දිගුව සමග ELF ගොනුව:
$ readelf -a Hello.exe
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
$ xxd Hello.exe | head -n1
00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000 MZ..............
MZ
එයින් අදහස් වන්නේ එය මයික්රොසොෆ්ට් වින්ඩෝස් සංඛ්යාත්මකව සම්බන්ධ කළ හැකි ක්රියාත්මක කළ හැකි බවයි. එය වින්ඩෝස් පෙට්ටියකට දමන්න, එවිට එය ක්රියාත්මක විය යුතුය.
මම ඇත wine
ස්ථාපනය, නමුත් wine
, වින්ඩෝස් යෙදුම් සඳහා ගැළපෙන තට්ටුව වීම, ක්රියාත්මක කිරීමට දීර්ඝ කාලයක් 5x පමණ කාලයක් ගතවේ Hello.exe
ලෙස mono
එය නොවේ නම්, එය සෘජුවම කරන්න ක්රියාත්මක wine
ක් එය.
මම හිතන්නේ mono
කර්නල් මොඩියුලයක් ස්ථාපනය කර mono
ඇති අතර එය exec
සිස්කල් / එස් වලට බාධා කරයි , නැතහොත් ආරම්භ වන ද්විමය ග්රහණයන් අල්ලා ගනී 4D 5A
, නමුත් lsmod | grep mono
මිතුරන් දෝෂයක් ඇති කරයි.
මෙහි සිදුවන්නේ කුමක්ද, මෙම ක්රියාත්මක කළ හැකි විශේෂ බව කර්නලය දැන ගන්නේ කෙසේද?
සාක්ෂි සඳහා එය මගේ ෂෙල් වැඩ කරන මැජික් නොවේ, මම එය ක්රියාත්මක කිරීම සඳහා ක්රැප් ෂෙල් (අකා sh
) භාවිතා කළ අතර එය තවමත් දේශීයව ක්රියාත්මක වේ.
විචාරකයෙකු කුතුහලයෙන් සිටි බැවින් මෙන්න වැඩසටහන සම්පුර්ණයෙන්ම:
using System;
class Hello {
/// <summary>
/// The main entry point for the application
/// </summary>
[STAThread]
public static void Main(string[] args) {
System.Console.Write("Hello, World!\n");
}
}
program codefile
, ඔබේ නඩුවේ වැඩසටහන මොනෝ වන අතර මගේ උදාහරණවලට php, python, perl සහ java ඇතුළත් වේ. කේතය හරහා තවමත් ක්රියාත්මක වන .exe ගොනුව හැර වෙනත් දිගුවකට මොනෝ ඉඩ ලබා දෙන්නේදැයි මම සැක කරමි. අවසානයේ මෙය සම්පාදිත කේතයක් ක්රියාත්මක කරන බැවින් එය කවුළු මත රඳා නොපවතී. කෙසේ වෙතත් ඔබේ මූලාශ්ර ගොනුවට වින්ඩෝස් පමණක් ඒපීඅයි වැනි යැපෙන කේතයක් තිබේ නම් පැහැදිලිවම එම exe ගොනුව ක්රියාත්මක කිරීම සඳහා ඔබට වයින් අවශ්ය විය යුතුය.
/etc/magic
හෝ /usr/share/file/magic
(හෝ ඒ හා සමාන ඉන්ද්රජාලික පිහිටීම) මෙය කිරීමට අවශ්ය තොරතුරු අඩංගු ගොනුවයි.
$ foo.jar
වෙනුවට කළ හැකි දේ $ java -jar foo.jar
- මොනෝ සඳහා කරන දෙයට සමාන ය.
php hello.php
හෝpython hello.py
හෝ ක්රියාත්මක කළහොත් ඒවා ක්රියාත්මක වන්නේ ඒවා ක්රියාත්මක කළ නොහැකි නමුත් වැඩසටහනක් කියවා ක්රියාත්මක කරන ගොනුවකි. කෙසේ වෙතත් ඔබ වෙනුවට ඔබ ධාවනය කරන්නේ නම් මම ඔබේ ප්රශ්නය සොයාගෙන පිළිගත් පිළිතුර වඩාත් සාධාරණයි (එය අනිවාර්යයෙන්ම binfmt-support භාවිතා කරයි.perl hello.pl
java hello
./hello.exe
mono hello.exe