| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- .\"
- .\" The Mono Linker manual page.
- .\"
- .\" Author:
- .\" Jb Evain <[email protected]>
- .\"
- .\" Copyright (C) 2007 Novell, Inc (http://www.novell.com)
- .\"
- .de Sp \"
- .if t .sp .5v
- .if n .sp
- ..
- .TH CIL Linker "monolinker"
- .SH NAME
- Mono CIL Linker
- .SH SYNOPSIS
- .PP
- .B monolinker [-o output_directory][-l i18n_assemblies][-c skip | copy | link] -x descriptor | -a assembly | -i info_file ...
- .SH DESCRIPTION
- \fImonolinker\fP is a CIL Linker.
- .PP.
- The linker is a tool one can use to only ship the minimal possible set of
- functions that a set of programs might require to run as opposed to the full
- libraries.
- .PP
- The linker analyses the intermediate code (CIL) produced by every
- compiler targeting the Mono platform like mcs, gmcs, vbnc, booc or
- others. It will walk through all the code that it is given to it, and
- remove all the unused methods and classes. This is done using a mark
- and sweep operation on all the code that it is referenced.
- .PP
- The generated output from the monolinker can be later processed by the
- .I mkbundle
- tool to generate small native self-contained executables.
- .PP
- Do not confuse this with the Assembly Linker (al) which creates
- assemblies from manifests, modules and resource files.
- .SH OPTIONS
- .TP
- .I "-d search_directory"
- Specify a directory to the linker where to look for assemblies.
- .TP
- .I "-o output_directory"
- Specify the output directory, default is 'output'.
- .Sp
- If you specify the directory `.', please ensure that you won't write over
- important assemblies of yours.
- .TP
- .I "-b true | false"
- Specify whether to generate debug symbols or not, default is false.
- .TP
- .I "-g true | false"
- Specify whether to generate a new guid for each linked module or reuse the
- existing one, default is true.
- .TP
- .I "-l i18n_assemblies"
- Specify what to do with the region specific assemblies
- .Sp
- Mono have a few assemblies which contains everything region specific:
- .nf
- I18N.CJK.dll
- I18N.MidEast.dll
- I18N.Other.dll
- I18N.Rare.dll
- I18N.West.dll
- .fi
- .Sp
- By default, they will all be copied to the output directory, but you can
- specify which one you want using this command. The choice can
- either be: none, all, cjk, mideast, other, rare or west. You can
- combine the values with a comma.
- .TP
- .I "-c action"
- Specify the action to apply to the core assemblies.
- .Sp
- Core assemblies are the assemblies that belongs to the base class library,
- like mscorlib.dll, System.dll or System.Windows.Forms.dll.
- .Sp
- The linker supports three operations on these assemblies, you can
- specify one of the following actions:
- .RS
- .ne 8
- .TP
- .I skip
- This instructs the linker to skip them and do nothing with them.
- .TP
- .I copy
- This instructs the linker to copy them to the output directory,
- .TP
- .I link
- This instructs the linker to apply the linking process and reduce
- their size.
- .ne
- .RE
- .Sp
- .TP
- .I "-p action assembly"
- Specify per assembly which action to apply.
- .TP
- .I "-x descriptor"
- Use an XML descriptor as a source for the linker.
- .Sp
- Here is an example that shows all the possibilities of this format:
- .Sp
- .nf
- <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" />
- </type>
- </assembly>
- </linker>
- .fi
- .Sp
- In this example, the linker will link the types Foo, Bar, Baz and Gazonk.
- .Sp
- The preserve attribute ensures that all the fields of the type Baz will be
- always be linked, not matter if they are used or not, but that neither the
- fields or the methods of Bar will be linked if they are not used. Not
- specifying a preserve attribute implies that we are preserving everything in
- the specified type.
- .Sp
- The required attribute specifies that if the type is not marked, during the
- mark operation, it will not be linked.
- .Sp
- The type Gazonk will be linked, as well as its constructor taking a string as a
- parameter, and it's _blah field.
- .Sp
- You can have multiple assembly nodes.
- .TP
- .I "-a assemblies"
- use an assembly as a source for the linker.
- .Sp
- The linker will walk through all the methods of the assembly to generate only what
- is necessary for this assembly to run.
- .TP
- .I "-i info_file"
- use a .info xml file as a source for the linker.
- .Sp
- An info file is a file produced by the tool mono-api-info. The linker will use it to
- generate an assembly that contains only what the public API defined in he info file
- needs.
- .TP
- .I "-s [StepBefore:]StepFullName,StepAssembly[:StepAfter]"
- .Sp
- You can ask the linker to execute custom steps by using the -s command. This command
- takes the standard TypeFullName,Assembly format to locate the step. You can customize
- its position in the pipeline by either adding it before a step, or after.
- .Sp
- Example:
- .Sp
- .nf
- 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);
- }
- }
- }
- }
- .fi
- .Sp
- If you compile this custom against monolinker to a Foo.dll assembly, you
- can use the
- .I -s
- switch as follows. To add the FooStep at the end of the pipeline:
- .Sp
- .nf
- monolinker -s Foo.FooStep,Foo -a program.exe
- .fi
- .Sp
- This commanand will add the FooStep after the MarkStep:
- .Sp
- .nf
- monolinker -s MarkStep:Foo.FooStep,Foo -a program.exe
- .fi
- .Sp
- This command will add the FooStep before the MarkStep:
- .Sp
- .nf
- monolinker -s Foo.FooStep,Foo:MarkStep -a program.exe
- .fi
- .Sp
- This command will add the FooStep before the MarkStep
- .SH COPYRIGHT
- Copyright (C) 2007 Novell, Inc (http://www.novell.com)
- .SH BUGS
- Bugs report are welcome at http://bugzilla.ximian.com
- .PP
- Product Mono Tools, Component linker.
- .SH MAILING LISTS
- Mailing lists are listed at http://www.mono-project.com/Mailing_Lists
- .SH WEB SITE
- http://www.mono-project.com/Linker
- .SH AUTHORS
- The linker has been written by Jb Evain, and have been partially founded by
- the Google Summer of Code.
- .SH LICENSE
- The linker is licensed under the MIT/X11 license. Please read the accompayning
- MIT.X11 file for details.
- .SH SEE ALSO
- .BR al(1),mkbundle(1),mono(1),mcs(1).
|