[Mono-osx] Problem with loading OSX libc ( malloc)

Paolo Molaro lupus at ximian.com
Tue Oct 10 10:54:49 EDT 2006


On 10/10/06 Eoin Norris wrote:
> Downloaded some SQLite sources from the good people at Finisar, and  
> compiled.  I get however an exception like this on run.
> 
>   The exception is   at (wrapper managed-to-native)  
> Finisar.SQLite.Util:malloc (uint)
>    at Finisar.SQLite.Util.AllocateUnmanagedMemory (Int32 size) [0x00000]
>    at Finisar.SQLite.MarshalStr.GetSQLiteStr () [0x00000]
>    at Finisar.SQLite.sqlite3.open (System.String filename) [0x00000]
>    at Finisar.SQLite.SQLiteConnection.Open () [0x00000]
> 
> Finisar imports the libc as so
> 
> [DllImport("libc")]
> private extern static IntPtr malloc(UInt32 bytes);
> 
> and calls it like so
> 
> 	public static IntPtr AllocateUnmanagedMemory( Int32 size )
> 		{
> 			if( (int)Environment.OSVersion.Platform == UNIX )
> 				return malloc((UInt32)1000);
> 			else
> 				return HeapAlloc( GetProcessHeap(), 0, (UInt32)size );
> 		}
> 
> 
>   Anybody got any ideas? ( note it does seem to load the SQLLite3  
> library - which is in /lib/bin/ because an db, if empty, is created  
> before I get an exception)

It looks like you don't have the mono config file properly installed or
some other local issue.
The file should be named config and placed in the $prefix/etc/mono
directory. The contents should be something like:
<configuration>
        <dllmap dll="cygwin1.dll" target="libc.dylib" />
        <dllmap dll="libc" target="libc.dylib" />
        <dllmap dll="intl" target="libintl.dylib" />
        <dllmap dll="libintl" target="libintl.dylib" />
        <dllmap dll="libxslt.dll" target="libxslt.dylib" />
        <dllmap dll="libmySQL.dll" target="libmysqlclient.dylib" />
        <dllmap dll="odbc32.dll" target="libodbc.dylib" />
        <dllmap dll="oci" target="libclntsh.dylib" />
        <dllmap dll="db2cli" target="libdb2_36.dylib" />
        <dllmap dll="msvcrt" target="libc.dylib" />
        <dllmap dll="MonoPosixHelper" target="libMonoPosixHelper.dylib"
/>
        <dllmap dll="sqlite" target="libsqlite.0.dylib" />
        <dllmap dll="sqlite3" target="libsqlite3.0.dylib" />
        <dllmap dll="libX11" target="libX11.dylib" />
        <dllmap dll="libcairo-2.dll" target="libcairo.so.2" />
</configuration>

You could also add one specific to the dll you have, as detailed in man
mono-config. For Finisar.SQLite.dll you'd have a file named
Finisar.SQLite.dll.config in the same directory with the following
contents:
<configuration>
        <dllmap dll="libc" target="libc.dylib" />
</configuration>

You can also get a more detailed error report with:
MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" mono prog.exe

Paste the result if it still won't work for you.

lupus

-- 
-----------------------------------------------------------------
lupus at debian.org                                     debian/rules
lupus at ximian.com                             Monkeys do it better


More information about the Mono-osx mailing list