[Mono-list] dlopen problem on Mono 2.4.4

Jonathan Pryor jonpryor at vt.edu
Thu Jan 27 12:45:15 EST 2011


No idea about the SIGSEGV, but your code could use some improvement...

On Jan 27, 2011, at 1:43 AM, batuakan wrote:
> c# source code
> -----------------
> 
> using System;
> using System.ComponentModel;
> using System.Runtime.InteropServices;
> 
> 
> namespace swi
> {
> 	class MainClass
> 	{
> 
> 		[DllImport("libdl.so", CallingConvention = CallingConvention.Cdecl,
> CharSet = CharSet.Auto)]

First of all, "libdl.so" may not exist; it certainly doesn't exist on my openSUSE 11.2 installation, as it's part of a debug package which I don't have installed.  You either want to [DllImport ("libdl.so.2")] or provide a .exe.config file which maps libdl.so to the actual library:

	http://www.mono-project.com/Config_DllMap

> 		private static extern IntPtr dlopen([In] string filename, [In] int flags);

[In] isn't necessary (as it's the default), but it won't hurt anything either.

> 		public static void Main (string[] args)
> 		{
> 			IntPtr handle = dlopen("libc.so.6", 0x02);
> 			if (handle == null)

This is wrong; it will ~never be true, as in order to operate you would need to box the IntPtr into an object to compare against null, and a boxed object will obviously never be null.

(Plus, iirc many mcs versions will error on the above code because the C# spec was interpreted to prevent that, as it's obviously non-sensical.)

Instead, you should do:

	if (handle == IntPtr.Zero)

 - Jon



More information about the Mono-list mailing list