CIL(Linker) CIL(Linker)

monolinker - لینکر کدهای CIL در مونو (Mono)

monolinker [-o output_directory] [-l i18n_assemblies] [-c skip | copy | link] -x descriptor | -a assembly | -i info_file ...

ابزار monolinker یک پیونددهنده (لینکر) برای بایت‌کدهای CIL است.

لینکر ابزاری است که می‌توان برای انتشار تنها حداقل مجموعه توابع لازم جهت اجرای مجموعه‌ای از برنامه‌ها (در برابر انتشار کامل کتابخانه‌ها) از آن بهره برد.

این ابزار کدهای میانی (CIL) تولیدشده توسط هر کامپایلری که سکوی Mono را هدف قرار داده باشد (نظیر mcs، gmcs، vbnc، booc و غیره) را تحلیل می‌کند. این برنامه تمام کدهای ورودی را بررسی کرده و کلاس‌ها و متدهای بلااستفاده را با عملیات علامت‌گذاری و جاروب (mark and sweep) حذف می‌نماید.

خروجی حاصل از monolinker را می‌توان بعداً با ابزار mkbundle پردازش کرد تا فایل‌های اجرایی نیتیو، کم‌حجم و خودکفا تولید شوند.

این ابزار نباید با Assembly Linker (al) که فایل‌های اسمبلی را از مانیفست‌ها، ماژول‌ها و منابع می‌سازد اشتباه گرفته شود.

تعیین دایرکتوری مورد نظر جهت جستجوی فایل‌های اسمبلی توسط لینکر.
تعیین دایرکتوری خروجی (پیش‌فرض: 'output').

چنانچه دایرکتوری `.` را تعیین می‌کنید، اطمینان حاصل نمایید که بر روی اسمبلی‌های حیاتی موجود بازنویسی انجام نشود.

تعیین تولید یا عدم تولید نمادهای اشکال‌زدایی (پیش‌فرض: false).
تعیین اینکه آیا برای هر ماژول لینک‌شده یک guid جدید تولید شود یا از مقدار موجود استفاده گردد (پیش‌فرض: true).
تعیین نحوه برخورد با اسمبلی‌های منطقه‌ای و بین‌المللی‌سازی (i18n):

مونو شامل چند فایل اسمبلی است که حاوی اجزای خاص مناطق مختلف هستند:

I18N.CJK.dll
I18N.MidEast.dll
I18N.Other.dll
I18N.Rare.dll
I18N.West.dll

به طور پیش‌فرض، تمامی آن‌ها در دایرکتوری خروجی کپی می‌شوند، اما می‌توانید با استفاده از این گزینه موارد مورد نیاز را مشخص کنید: none، all، cjk، mideast، other، rare یا west (می‌توان مقادیر را با کاما ترکیب نمود).

تعیین عملیاتی که باید بر روی اسمبلی‌های هسته (core assemblies) اعمال شود.

اسمبلی‌های هسته به کتابخانه کلاس پایه تعلق دارند، مانند mscorlib.dll، System.dll یا System.Windows.Forms.dll.

سه عملیات قابل اعمال هستند:

نادیده گرفتن آن‌ها توسط لینکر و عدم انجام هرگونه عملیات.
کپی کردن آن‌ها در دایرکتوری خروجی.
اعمال فرآیند پیوند و کاهش حجم آن‌ها.
تعیین عملیات به ازای هر اسمبلی به صورت جداگانه.
استفاده از یک فایل توصیف‌گر XML به عنوان مبدأ برای لینکر.

نمونه‌ای از قالب توصیف‌گر XML:

<linker>
	<assembly fullname="Library">
		<type fullname="Foo" />
		<type fullname="Bar" preserve="nothing" required="false" />
		<type fullname="Baz" preserve="fields" required="false" />
		<type fullname="Gazonk">
			<method signature="System.Void .ctor(System.String)" />
			<field signature="System.String _blah" />
			<field name="someFieldName" />
		</type>
	</assembly>
</linker>

در این مثال، لینکر انواع Foo، Bar، Baz و Gazonk را پیوند خواهد داد.

استفاده از یک اسمبلی به عنوان منبع لینکر. لینکر تمام متدهای آن را پیمایش می‌کند تا تنها اجزای لازم را تولید نماید.
استفاده از یک فایل xml از نوع .info به عنوان ورودی (تولیدشده توسط mono-api-info).
اجرای گام‌های سفارشی در خط لوله لینکر.

نمونه:

using System;
using Mono.Linker;
using Mono.Linker.Steps;
namespace Foo {
	public class FooStep : IStep {
		public void Process (LinkContext context)
		{
			foreach (IStep step in context.Pipeline.GetSteps ()) {
				Console.WriteLine (step.GetType ().Name);
			}
		}
	}
}

افزودن FooStep در انتهای خط لوله:

monolinker -s Foo.FooStep,Foo -a program.exe

افزودن FooStep پس از MarkStep:

monolinker -s MarkStep:Foo.FooStep,Foo -a program.exe
تعیین پارامتر برای یک گام سفارشی.

حق نشر (C) 2007 متعلق به Novell, Inc (http://www.novell.com)

گزارش اشکالات در نشانی زیر قابل ثبت است:

https://github.com/mono/linker/issues

فهرست‌های پستی در نشانی زیر موجود است:

http://www.mono-project.com/community/help/mailing-lists

http://www.mono-project.com/docs/tools+libraries/tools/linker

این لینکر توسط Jb Evain نوشته شده و بخشی از آن توسط Google Summer of Code تأمین مالی شده است.

این ابزار تحت مجوز MIT/X11 منتشر شده است.

al(1), mkbundle(1), mono(1), mcs(1)

monolinker