mono-shlib-cop man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

mono-shlib-cop(1)					     mono-shlib-cop(1)

NAME
       mono-shlib-cop - Shared Library Usage Checker

SYNOPSIS
       mono-shlib-cop [OPTIONS]* [ASSEMBLY-FILE-NAME]*

OPTIONS
       -p, --prefixes=PREFIX
	      Mono   installation   prefixes.	 This	is   to	  find	 $pre‐
	      fix/etc/mono/config.  The default is based upon the location  of
	      mscorlib.dll, and is normally correct.

DESCRIPTION
       mono-shlib-cop  is  a tool that inspects a managed assembly looking for
       erroneous or suspecious usage of shared libraries.

       The tool takes one or more assembly filenames, and inspects each assem‐
       bly specified.

       The errors checked for include:

       *      Does the shared library exist?

       *      Does the requested symbol exist within the shared library?

       The warnings checked for include:

       *      Is  the  target  shared  library a versioned library?  (Relevant
	      only on Unix systems, not Mac OS X or Windows.)

       In general, only versioned libraries such as libc.so.6 are  present  on
       the  user's  machine, and efforts to load libc.so will result in a Sys‐
       tem.DllNotFoundException.  There are three solutions to this:

       1.     Require that the user install any -devel packages which  provide
	      the  unversioned	library.   This usually requires that the user
	      install a large number of additional packages, complicating  the
	      installation process.

       2.     Use  a  fully versioned name in your DllImport statements.  This
	      requires editing your source code and recompiling	 whenever  you
	      need to target a different version of the shared library.

       3.     Provide  an  assembly.config  file which contains <dllmap/> ele‐
	      ments to remap the shared library name used by your assembly  to
	      the actual versioned shared library present on the users system.
	      Mono  provides  a	 number	 of  pre-existing  <dllmap/>  entries,
	      including ones for libc.so and libX11.so.

EXAMPLE
       The following code contains examples of the above errors and warnings:
	    using System.Runtime.InteropServices; // for DllImport
	    class Demo {
		 [DllImport ("bad-library-name")]
		 private static extern void BadLibraryName ();

		 [DllImport ("libc.so")]
		 private static extern void BadSymbolName ();

		 [DllImport ("libcap.so")]
		 private static extern int cap_clear (IntPtr cap_p);
	    }

       Bad library name
	      Assuming that the library bad-library-name doesn't exist on your
	      machine, Demo.BadLibraryName  will  generate  an	error,	as  it
	      requires	a  shared library which cannot be loaded.  This may be
	      ignorable; see BUGS

       Bad symbol name
	      Demo.BadSymbolName will generate an error, as libc.so  (remapped
	      to  libc.so.6  by	 mono's	 $prefix/etc/mono/config file) doesn't
	      contain the function BadSymbolName

       Unversioned library dependency
	      Assuming you have the file libcap.so , Demo.cap_clear will  gen‐
	      erate  a	warning because, while libcap.so could be loaded, lib‐
	      cap.so might not exist on the users machine (on  FC2,  /lib/lib‐
	      cap.so  is  provided by libcap-devel , and you can't assume that
	      end users will have any -devel packages installed).

FIXING CODE
       The fix depends on the warning or error:

       Bad library names
	      Use a valid library name in the DllImport attribute, or  provide
	      a	 <dllmap/>  entry to map your existing library name to a valid
	      library name.

       Bad symbol names
	      Reference a symbol that actually exists in the target library.

       Unversioned library dependency
	      Provide a <dllmap/> entry	 to  reference	a  properly  versioned
	      library, or ignore the warning (see BUGS ).

DLLMAP ENTRIES
       Mono looks for an ASSEMBLY-NAME mapping information.  For example, with
       mcs.exe , Mono would read mcs.exe.config ,  and	for  Mono.Posix.dll  ,
       Mono would read Mono.Posix.dll.config

       The  .config file is an XML document containing a top-level <configura‐
       tion/> section with nested <dllmap/> entries, which  contains  dll  and
       target  attributes.   The  dll attribute should contain the same string
       used in your DllImport attribute value, and the target attribute speci‐
       fies which shared library mono should actually load at runtime.

       A sample .config file is:
	    <configuration>
		 <dllmap dll="gtkembedmoz" target="libgtkembedmoz.so" />
	    </configuration>

BUGS
       *      Only  DllImport  entries	are  checked;  the  surrounding	 IL is
	      ignored.	Consequently, if  a  runtime  check  is	 performed  to
	      choose which shared library to invoke, an error will be reported
	      even though the specified library is never used.	Consider  this
	      code:
		   using System.Runtime.InteropServices; // for DllImport
		   class Beep {
			[DllImport ("kernel32.dll")]
			private static extern int Beep (int dwFreq, int dwDuration);

			[DllImport ("libcurses.so")]
			private static extern int beep ();

			public static void Beep ()
			{
			     if (System.IO.Path.DirectorySeparatorChar == '\\') {
				  Beep (750, 300);
			     }
			     else {
				  beep ();
			     }
			}
		   }
	      If  mono-shlib-cop  is  run  on  this assembly, an error will be
	      reported for using kernel32.dll , even though kernel32.dll  will
	      never be used on Unix platforms.

       *      mono-shlib-cop  currently	 only examines the shared library file
	      extension to determine if a warning should be generated.	A  .so
	      extension will always generate a warning, even if the .so is not
	      a symlink, isn't provided in a -devel package, and there	is  no
	      versioned	   shared   library   (possible	  examples   including
	      /usr/lib/libtcl8.4.so, /usr/lib/libubsec.so, etc.).

	      Consequently, warnings for any such libraries are	 useless,  and
	      incorrect.

	      Windows  and  Mac	 OS  X	will never generate warnings, as these
	      platforms use different shared library extensions.

MAILING LISTS
       Visit   http://lists.ximian.com/mailman/listinfo/mono-devel-list	   for
       details.

WEB SITE
       Visit http://www.mono-project.com for details

							     mono-shlib-cop(1)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net