MCR invocation
Show older comments
I understand that MCR is invoked by Java if I call my compiled code via .NET and Java. If I call compiled code through c/c++ shared libraries, or COM libraries, or standalone applications, would MCR still be invoked by Java?
I'm getting the error 'Unable to start the JVM' when calling my compiled Matlab code from .NET. And I'm thinking to switch to other interfaces to avoid the error. Would it be possible?
Can anyone else who encountered the JVM error suggest a solution?
Thanks,
Answers (1)
Kaustubha Govind
on 9 May 2011
1 vote
MATLAB and the MCR use JVM for some functionality. If the code that you'd like to compile does not use JVM functionality (you can verify this by starting MATLAB using "matlab -nojvm" from the system prompt and then running your code), you can compile your code using the mcc "-R -nojvm" option when compiling shared libraries or standalone applications.
With regards to why you see the "Unable to start the JVM" - I would recommend contacting MathWorks Tech Support so they can debug and diagnose the issue.
7 Comments
Shichang
on 9 May 2011
Kaustubha Govind
on 9 May 2011
Apologies - it looks like "-R" option is only available for standalone applications (see note on http://www.mathworks.com/help/toolbox/compiler/mcc.html). It also says "To override MCR options in the other MATLAB Compiler targets, use the mclInitializeApplication and mclTerminateApplication functions. For more information on these functions, see Calling a Shared Library (http://www.mathworks.com/help/toolbox/compiler/f2-972343.html#f2-999458)."
So it looks like you need to pass the "-nojvm" option into mclInitializeApplication (http://www.mathworks.com/help/toolbox/compiler/mclinitializeapplication.html).
Shichang
on 9 May 2011
Kaustubha Govind
on 9 May 2011
Sorry about that - mclInitializeApplication is indeed meant to be called from C/C++ applications. For a .NET assembly, it seems that you can do it by specify NOJVM as an assembly-wide attribute. See: http://www.mathworks.com/help/toolbox/dotnetbuilder/ug/bso89j3.html#bso89ma-1
Shichang
on 9 May 2011
Kaustubha Govind
on 9 May 2011
I'm sorry - I have little to no experience with Builder NE - have you tried contacting Tech Support about why using the NOJVM attribute doesn't work?
To increase Java heap space for the MCR, I believe you need to create a java.opts file just like for MATLAB (http://www.mathworks.com/support/solutions/en/data/1-18I2C/index.html) and place it in the $MCRROOT/bin/$ARCH directory. $MCRROOT is the MCR root directory (eg. C:\Program Files\MATLAB\MATLAB Compiler Runtime\) and $ARCH is your system
architecture, which you find by typing at the MATLAB Command Prompt: computer('arch')
Shichang
on 9 May 2011
Categories
Find more on Deploy to .NET Applications Using MWArray API in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!