I want to package up an application in MATLAB for another team to use. They will have an appropriate version of MATLAB to run this application, but they might not necessarily have licenses for all the toolboxes used by the application.
Is there a way to "bundle" the toolboxes into the application so that they do not require expensive licenses to run it?
If not, is it possible to create a stand-alone/license independent MATLAB application a different way?
EDIT: Some of these applications might feature GUIs as well as command line interfaces.
To generate code that can be run by MATLAB, you need the MATLAB Coder. The codegen command will generate the executables that can be run in MATLAB. Loren of MathWorks has a nice blog post on the product.
Here is an example of how to use codegen to create a MEX function from MATLAB code.
One big caveat is that with MATLAB Coder, the complete functionality of MATLAB is not yet available for compilation. This is because the generated binaries do not require the MATLAB Compiler Runtime (MCR), which is essentially a headless MATLAB virtual machine. Instead MATLAB Coder generates C code that is truly standalone, but the code generation is somewhat limited as a result. Here is a description of the subset of functionality, and here are complete lists of functions supported. Most toolkit functions appear to be supported according to the categorical list.
If the required functions are not supported, then it will be necessary to use the Compiler to generate standalone libraries and roll your own MEX interface to those libraries, as MrAzzaman indicated. Another possibilities is to use the loadlibrary function to directly load the Compiler-generate libraries, although I have never tried this last option. If you can't successfully interface with these libraries back in MATLAB, the MATLAB compiler can of course be used to generate a standalone executable. The deploytool simplifies the process of packaging the code and its dependencies.
The MATLAB Compiler sounds like exactly what you need. Unfortunately, it is a separate Toolbox which you would have to purchase.
EDIT: I should note that this will compile your MATLAB code into an application/library, not MATLAB code. The other team would still be able to use it with MATLAB, I believe, but I don't think they would be able to see the code itself.
Related
I know this has been posted before but none of the answers work for me.
I'm using VISSIM v10 and made a DLL File to make an external driver model. This is working well.
But what I want is to implement the algorithms in MATLAB instead and make the DLL File send data to Matlab, then Matlab computes the updates the values and sends them back to DLL. The DLL then sends the value back to VISSIM.
So along with .vcproj, .h and .cpp files provided by VISSIM to create the DLL File (im using Microsoft Visual Studio 19), I've added engine.h file in the same project file to be able to use engine routines but it gives 'unresolved external symbol' error for engOpen and engEvalString. I try the same thing in a new .cpp file and it works but how can I link that to VISSIM..
I've added all the libraries and include directories in the properties and configuration type as .dll.
Tettamanti and Varga (2012) mentions that this is the way to be able to do it. But it isn't working for me for now. Help ?
To call MATLAB algorithms from INSIDE your Vissim External Driver Module Dll, you have the following options:
Use MATLAB Compiler SDK for C/C++ - this SDK can help wrapping the MATLAB algorithms into a separate royalty-free DLL, which you can LINK with your Vissim External Driver Module DLL.
This would provide your the most computationally efficient and minimal overhead interoperability with MATLAB runtime.
A good command of C/C++ is a must because you will have to figure out a lot of things yourself;
You would need a MATLAB add-on license for this feature;
You can distribute your MATLAB DLL royalty free (together with MATLAB runtime libs) to a third-party who does not have an MATLAB license;
Use MATLAB directly as a COM automation server inside your Vissim External Driver Module DLL - you would just have to manage MATLAB as out-of-process COM automation server yourself, and do the house-keeping carefully;
This does not require a MATLAB add-on license;
It requires a local, licensed MATLAB installed on the same computer as Vissim;
You need to figure out a lot of things yourself, too.
Use MATLAB External Engine API in C/C++, which is essentially a convoluted wrapper of MATLAB out-process COM object, but in a modern C++ flavor;
This saves you the hassle managing MATLAB COM object yourself, but it demands you, again, to have a mastery of MODERN C++ (i.e., C++11/C++14/C++17) features.
No additional MATLAB add-on license is required;
It requires a local, licensed MATLAB installed in the same computer as Vissim.
I don't see there existing an easy, and straightforward way of integrating Vissim External Driver Module DLL DIRECTLY with MATLAB. All requires non-trivia C++ and COM knowledge and skills.
If you are good with modern C++, I would suggest you go with Option 1 - it provides the best performance.
I just want to make an exe file in MATLAb to make a stand-alone application, after some research on the internet I found this link on the MATLAB website and download MATLAB Runtime compile and made my application.
It makes me a exe file but the problem is that if you want to run your code on another computer without installing MATLAB Runtime compiler it does not work.
In .Net application we install .Net framework it's OK but in this case MATLAB Runtime compiler has a huge size, it's about 1.7GB and it's little hard for user to download and install it on their computer.
Is there any way to handle it?
You can use the Matlab Coder to generate C code which you can then compile. It will not do graphics though, but it will do a lot (including some advanced signal processing). There is no way around installing the Matlab Runtime Compiler if you want graphics, although if your application runs on antiquated Matlab 5.3 (about 20 years old), this version of Matlab used to create standalone applications (with graphics) that did not require the runtime compiler.
I need to localize facial landmarks as a part of my research project and planning to use Supervised Descent Method (SDM) for that. Both the C++ and Matlab versions are available at the following site and when I contacted them they said C++ version is not going to be available until they secure it. So, I had no other option and had to opt for Matlab version.
http://www.humansensing.cs.cmu.edu/intraface/download_functions_matlab.html
The problem is that My project is in C++ and OpenCV. I wonder whether there is a way to access Matlab version of SDM in Visual C++ . I mean, is there an integration mechanism available for that ?
And, the next issue is when executing the "Facial Feature Detection" code available at the above site I get the following error.
I executed it as given below.
[detected_points] = xx_track_detect(Model,[],image,[],options);
and, it says "undefined function or variable named 'model' "
anyone have a solution to this ?
It seems like you need to use Matlab engine to be able to execute Matlab commands from C++. The engine interface allows you to do just so.
Regarding the model variable - it is probably a representation of the learned model for facial landmarks, it should be supplied with the packge or you need to tune it by yourself. Without additional information I suggest you contact the publishers of the package for more information.
Is it possible to compile Matlab code into a stand alone exe? meaning being able to run the program without having to have matlab or the matlab runtime environment installed on the computer?
does it help that the code has no GUI and does not use any toolboxes? also, the only interaction the person has with the code is through the command prompt
You need MATLAB Coder to generate C/C++ code from your MATLAB code. Yes, it does help that you don't have any GUI. Your code also needs to be restricted to the subset of MATLAB language that is supported by code generation. As far as toolboxes are concerned, there are quite a few which are supported by code generation.
A few people have mentioned the MATLAB Compiler. This is indeed for deployment on a machine where the end user does not have MATLAB, but it does require the installation of the runtime environment (MCR or MATLAB Component Runtime), which is freely distributable if you have a license of MATLAB Compiler. This does allow you to compile GUIs, but anything that is compiled on Windows can only be deployed on Windows, Linux on Linux, etc... (unless things have changed since I last used it).
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.
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.
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.
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.
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.
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