5

I have some Matlab code and a GUI for it and I want to make a standalone .exe so that it can be used on computers that don't have Matlab installed.

I know about the Matlab compiler and how to use it, but that creates an .exe that only works if the user has the MATLAB Compiler Run-Time (MCR) installed.

What I'm interested in, is if there are any ways to create a standalone .exe that still uses the Matlab code but does not depend on the MCR. I want it to just run when you click it without needing anything else installed.

I know C can make use of Matlab, is there any way to use the code with C? How about any open source Matlab alternatives that can it?

As a last resort, if I were to rewrite the Matlab code in another language, what language would you recommend? I was thinking C or Python.

Thanks.

Amro
  • 123,847
  • 25
  • 243
  • 454
user384918
  • 233
  • 2
  • 7
  • Most answers seem to be outdated. If your target doesn't have matlab, you can use MATLAB Compiler with the 'include MCR' option, but the file will be big. The alternative is to use matlab Coder as @Amro suggested. – Dennis Jaheruddin Jan 30 '14 at 10:13

5 Answers5

2

The MCR is required, but there's a trick: it doesn't actually have to be installed, just available on the PATH. Running MCR stuff doesn't require any registry entries or anything else special from the installation process. You just need the MCR files readable and the DLLs locatable by the normal lookup mechanism, which includes checking the PATH at the time of program launch.

For example, I've run compiled Matlab apps using an MCR that's "installed" on a network drive. You run the MCR installer on one machine and have it install to network drive X:\Matlab\MCR\R2010b-win32 instead of the usual C:\Program Files location. Then have your program be launched through a wrapper script that adds X:\Matlab\MCR\R2010b-win32\bin\win32 to the PATH before calling your actual .exe file, and it'll run on any other machine that sees the same drive, even if the MCR installer hasn't been run on them. (Eventually we stopped because loading the MCR from the network is a performance hit.)

You could use this trick to bundle the MCR with your application. Stick the whole MCR installation (the dir tree resulting from installation, not the installer program itself) in a subdirectory of your application's directory tree, and have the entry point to your app be a .bat file or other wrapper script that sticks that MCR dir on the PATH before running your MCR-dependent .exe file.

Of course, check with your legal folks to make sure this doesn't violate your licensing terms.

Andrew Janke
  • 23,508
  • 5
  • 56
  • 85
2

It's been a while since I looked at the MATLAB compiler but if I remember correctly it used to be able to generate C/C++ code rather than going all-out and generating an executable. The hangup was always in which toolboxes your code used and whether the compiler supported them or not. Any chance you could install the MATLAB application on a server and have a desktop client phone in for results?

As far as other languages go, I'd check out NumPy and SciPy in combination with matplotlib (matplotlib.sf.net). I'm working with a MATLAB developer right now and so far he's pretty pleased with the experience.

ChrisC
  • 1,282
  • 9
  • 9
  • "Any chance you could install the MATLAB application on a server and have a desktop client phone in for results" -- this is probably too much work for my purposes. I was just curious if there was something more convenient than installing the MCR. Most people I know tend to hate installing something just to run one little application. Thanks for your suggestion of NumPy and matplotlib though. I will keep these in mind. – user384918 Jul 09 '10 at 15:48
1

I have researched a bit, and I am afraid that your only option is either using the MCR, or converting your code into another language. It makes sense that MathWorks would want you to use only their compiler in order to create .exe files.

Consider another language only if you are already familiar with them, and/or you have enough time for what you are trying to accomplish. Furthermore, if you are using functions in Matlab that you didn't write, then you will have to write those also, which may be very hard/impossible.

If none of the above is a problem, then what language you should use is really up to you. You are not just limited to C and Python. Matlab, im my opinion, is very much like other common languages, at least in terms of syntax. You will have to do some learning either way, so I would suggest that you either go with a language you know, or pick a language for which finding help is easy. C# and Java are two of the more 'famous' languages.

scw
  • 158
  • 5
sbenderli
  • 3,654
  • 9
  • 35
  • 48
  • Yeah, it was just wishful thinking. The MCR is free though, so it's not a big deal; just an annoyance for users. I'm not honestly considering rewriting the code. Like I said, it's just a last resort (and I'll probably just make up an excuse before I have to resort to it >_>). – user384918 Jul 09 '10 at 15:59
1

MathWorks recently introduced a new product MATLAB Coder. It is capable of generating C\C++ code from your MATLAB code (generates source code not executables). The generated code is portable and does not depend on the MCR, though it only supports a subset of core MATLAB language features.

Amro
  • 123,847
  • 25
  • 243
  • 454
  • Would then one be able to generate a .exe with all the matlab features (plots and GUIs for example)? – ironzionlion Jul 23 '14 at 12:50
  • 1
    [MATLAB Coder](http://www.mathworks.com/products/matlab-coder/) produces C/C++ source code, it is up to you to compile it into executable binaries. Note that it does not support generating C/C++ code for any kind of plots or GUIs. The [language subset supported](http://www.mathworks.com/help/coder/ug/matlab-language-features-supported-for-code-generation.html) is well documented, as well as the set of [functions and toolboxes supported](http://www.mathworks.com/help/coder/ug/functions-supported-for-code-generation--alphabetical-list.html) for code generation. – Amro Jul 23 '14 at 17:47
  • [MATLAB Compiler](http://www.mathworks.com/products/compiler/) (a different toolbox altogether) enables you to deploy your MATLAB code almost as is (plots, GUIs, and all). Underneath it packages all your code into one program which is interpreted and executed on the [MCR runtime](http://www.mathworks.com/products/compiler/mcr/) (as stripped version of the MATLAB engine) downloadable for free by end-users – Amro Jul 23 '14 at 17:55
0

The Matlab 'compiler' is not a compiler. It translates Matlab m-code into C++ code and then sends that to an actual compiler like the one in Visual Studio, etc. The code it makes is not really human-readable.

To make a standalone app, install the following toolboxes (at whatever price you paid):

MATLAB Builder JA, MATLAB Builder NE, MATLAB Compiler

Set up the Matlab compiler by pointing it to the actual compiler on your drive (i.e. mbuild -setup).

Select a compiler: [1] Microsoft Visual C++ 2008 SP1 in C:\Program Files (x86)\Microsoft Visual Studio 9.0

Then use the (i.e. type deploytool) to make the main and to define various helper functions etc. Sect windows console or standalone. Then click build. It will make the exe-file for you. You can also compile to DLL, etc as needed.

Newer versions of the 'compiler' support compiling of eval, all toolboxes that are licensed, and it supports import of java classes that will allow you to use for example, a DOM for xml-file parsing etc.

To use the resulting exe-file on a computer that does not have Matlab installed on it, you need to obtain the Matlab MCR and install it. The MCR must match exactly the version of Matlab you used to make the compiled code.

Regards,

Ivan

ivan
  • 1