11
$\begingroup$

Has anyone have any luck running .NET/Link on Mono?

When I run .NET/Link to call Mathematica from within a Mono program, this is the error message I receive.

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

Now the C# code for calling Mathematica is:

    _kl = MathLinkFactory.CreateKernelLink("-linkmode launch -linkname '\"/Applications/Mathematica.app/Contents/MacOS/MathKernel\" -mathlink'");

The same argument worked for J/Link, but for some reason does not work on NETLink.

$\endgroup$
0

1 Answer 1

16
$\begingroup$

To use .NET/Link from a Mono program, you need to make sure that the system can find the MathLink shared library. This generally means adding the appropriate path to an environment variable that the system uses for library lookups. You can do this is in the standard way that is appropriate for your OS/shell program, either in a shell config file or on the command line. For example:

On OSX:

export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Applications/Mathematica.app/Contents/Frameworks/mathlink.framework
mono MyProgram

On Linux:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Wolfram/Mathematica/9.0/SystemFiles/Libraries/Linux
mono MyProgram

Most of .NET/Link works fine with Mono.

$\endgroup$
1
  • $\begingroup$ It's incredible to me that this works, although I have not tried it myself. $\endgroup$
    – William
    Aug 18, 2015 at 22:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.