MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Question about MathLink and .NET/Link with Mono on Mac OS X and Linux

  • To: mathgroup at smc.vnet.net
  • Subject: [mg97004] Question about MathLink and .NET/Link with Mono on Mac OS X and Linux
  • From: Cornelis Swanepoel <crs at cygnusblack.co.uk>
  • Date: Sun, 1 Mar 2009 04:58:50 -0500 (EST)

hi there,

I would like to be able to interact between the Mono runtime and  
Mathematica but I am running into problems regarding the MathLink  
libMLi3 library.

I have the following setup:
OS X --> 10.5.6
Mathematica version string --> 7.0 for Mac OS X x86 (64-bit) (November  
11, 2008)
Mono version string --> Mono JIT compiler version 2.2 (tarball Fri  
Jan  9 10:45:07 MST 2009) ... Architecture: x86

On searching the MathGroup archive I found a message indicating that  
there exists experimental support for Mono on Linux in .NET/Link since  
ver 5.2 of Mathematica as long as the mono command is in your $PATH  
(yes in my case).
( Oct 2005 [msg61190] )
and as NETLink was placed in $InstallationDirectory/SystemFiles/ 
Links/, next to JLink, by the Mathematica for OS X installer, I  
expected things to work out of the box, like JLink does.

Following the procedure set out in the NETLink tutorial I typed into a  
notebook with an active kernel:
	Needs["NETLink`"]
	$Packages
and received the following output:
	{"NETLink`", "ResourceLocator`", "DocumentationSearch`", "JLink`", \
	"PacletManager`", "WebServices`", "System`", "Global`"}

However, when trying to launch the runtime via
	InstallNET[]
it fails with:
	LinkOpen::linke : Could not find MathLink executable. >>
    	InstallNET::fail :  A link to the .NET runtime could not be  
established. >>
	$Failed

This happens even when I SetDirectory to $InstallationDirectory/ 
SystemFiles/Links/MathLink
When trying to launch the mathlink executable manually from the shell  
it fails with:
	-bash: ./mathlink: cannot execute binary file

I am still very much of a Mathematica noob but I went and opened the  
InstallNET.m source file and found another indicator that this should  
be possible,
line 176,7 If[!osIsWindows[], \ netlinkPath = "mono " ...

The source in this file seems to indicate that the key to getting this  
working lies in the netLinkExe file,
InstallableNET.exe, which is next to NETLink.m.

I tried to launch this file on the Mono CLR and received the following  
error message:
rools@roolsMBP:~/Applications/Mathematica.app/SystemFiles/Links/ 
NETLink $mono InstallableNET.exe

Unhandled Exception: System.TypeInitializationException: An exception  
was thrown by the type initializer for  
Wolfram.NETLink.Internal.NativeLink ---> System.DllNotFoundException:  
libML32i3.so
   at (wrapper managed-to-native)  
Wolfram.NETLink.Internal.UnixMathLinkAPIProvider:MLBegin (intptr)
   at Wolfram.NETLink.Internal.UnixMathLinkAPIProvider.extMLBegin  
(IntPtr zero) [0x00000]
   at Wolfram.NETLink.Internal.NativeLink..cctor () [0x00000]
   --- End of inner exception stack trace ---
   at Wolfram.NETLink.MathLinkFactory.createMathLink0 (System.String  
cmdLine, System.String[] argv) [0x00000]
   at Wolfram.NETLink.MathLinkFactory.CreateMathLink (System.String[]  
argv) [0x00000]
   at Wolfram.NETLink.MathLinkFactory.createKernelLink0 (System.String  
cmdLine, System.String[] argv) [0x00000]
   at Wolfram.NETLink.MathLinkFactory.CreateKernelLink  
(System.String[] argv) [0x00000]
   at Wolfram.NETLink.InstallableNET.Main (System.String[] args)  
[0x00000]


The problem is that the UnixMathLinkAPIProvider is called and not the  
MacMathLinkAPIProvider.
Because of this it is trying to find the libML32i3.so shared library.
Mathematica for OS X does not have an OS X dynamic library, i.e.  
libML32i3.dylib - the equivalent of the Linux shared library.
Only a static library, libMLi3.a which resides in
$InstallationDirectory/SystemFiles/Links/MathLink/DeveloperKit/ 
CompilerAdditions
for which I created a link in /usr/local/lib

I'm wondering if there is a way to change things to load the  
MacMathLinkAPIProvider instead.
Obviously the .cs source files are available but this is baked into  
InstallableNET.exe

And if I could, would I be able to do the DllImport on libMLi3.a?
Currently the MacMathLinkAPIProvider.cs file declares the library
[DllImport("mathlink")] compared to the Unix provider's  
[DllImport("libML32i3.so")]

Any advice, thoughts and ideas will be greatly appreciated.

Cornelis


















  • Prev by Date: Re: Need some help with monitoring evaluation
  • Next by Date: Re: "Do What I Mean" - a suggestion for improving
  • Previous by thread: Re: Need some help with monitoring evaluation
  • Next by thread: Re: "Do What I Mean" - a suggestion for improving