MATLAB Answers

Why do I get an error saying "Undefined function or variable 'matlabrc'" when executing a program that uses a MATLAB-compiled shared library?

559 views (last 30 days)
I am trying to use a MATLAB-compiled shared library in a C++ program. There are no issues when I use the same code with the libraries compiled using MATLAB Compiler 4.7 (R2007b). However, when I recompile all the MATLAB libraries using MATLAB Compiler 4.9 (R2008b) and then try to execute the same program, the <libName>Initialize() function fails with the following error:
??? Undefined function or variable 'matlabrc'

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 30 Apr 2020
Edited: MathWorks Support Team on 30 Apr 2020
This change has been incorporated into the documentation in MATLAB Compiler 4.11 (R2009b). For previous releases, read below for any additional information:
Starting MATLAB Compiler 4.8 (R2008a), CTF data is now automatically embedded directly in the C/C++, main and Winmain, shared libraries and standalones by default. In order to override this default functionality, you must compile with the -C 'Do Not Embed CTF Archive By Default 'option.
Since the MATLABRC script is usually included in the CTF archive, you may receive this error if the application is unable to find the CTF archive. Conventionally, some application build procedures strip all binary files involved in the process. If the embedded CTF archives in shared libraries are stripped in this process, the driver application may not be able to find the CTF data during execution.
If your application build process performs such a process, please compile with the -C 'Do Not Embed CTF Archive By Default 'option.
Another workaround here is to delete the CTF extraction folder, and run the EXE again. If the MCR_CACHE_ROOT environment variable is not set, the CTF extraction location can be found at:
C:\Users\[username]\AppData\Local\Temp\[username]\mcrCache[version]
If neither of these resolves the issue, follow these additional troubleshooting steps, previously found at http://www.mathworks.com/help/compiler/deployed-applications.html :
1) Ensure that your application runs in MATLAB (uncompiled) without this error.
2) Ensure that MATLAB starts up without this error.
3) Verify that the generated deployable archive contains a file called matlabrc.m
4) Verify that the generated code (in the * _mcc_component_data.c * file) adds the deployable archive folder containing matlabrc.m to the MATLAB runtime path
5) Delete the *_mcr folder and rerun the application.
6) Recompile the application.

More Answers (3)

Patrick Rollin
Patrick Rollin on 15 Oct 2014
I've had this issue arise from a perfectly working Matlab executable via MCR2013a (v8.1)... and one day it stopped working.
I solved the issue (for Windows 7 64bit) by:
1) deleting the Matlab Runtime Compiler temporary cache folder.
e.g.(C:\Users\[username]\AppData\Local\Temp\[username]\mcrCache[version])
2) re-ran the executable manually to rebuild the required cache folder.
Every time this issue re-arises I simply repeat these 2 steps and I'm back in business.
Cheers.
  12 Comments

Sign in to comment.


Image Analyst
Image Analyst on 8 Jan 2021
I was told by tech support that if the MCR extracts to
C:\Users\[username]\AppData\Local\Temp\[username]\mcrCache[version]
like it normally does, then because it's in a "Temp" folder, Windows might go in there on occasion and delete files to free up space. If a file had been deleted, this would give rise to the error. If you delete this folder, then when you run your application again, it will see that the temp folder is missing and will recreate it, restoring any missing files, thus letting it work again.
In the future, to avoid having Windows delete any of these files, you can have your deployed application extract the MCR/CTF to a non-temporary folder that you have write permission to. That way, Windows won't touch the files. To do this you need to set a System level environment variable. So bring up the Environment Variable control panel and make a system level variable called MCR_CACHE_ROOT and set it to some folder you have access to, like
MCR_CACHE_ROOT = C:\Users\Public\Documents\MATLAB\MCR
Your apps will extract the CTF to that folder. It seems each app has its own subfolder under that folder.
  2 Comments
Image Analyst
Image Analyst on 16 Jan 2021
Just before you try to call loadlibrary() with that filename, try this:
if ~isfile(fullFileName)
% File not found.
errorMessage = sprintf('ERROR : DLL file not found:\n%d', fullFileName);
fprintf('%s\n', errorMessage);
uiwait(errordlg(errorMessage));
else
successMessage = sprintf('SUCCESS! I found the DLL file at "%s".', fullFileName);
fprintf('%s\n', successMessage);
uiwait(helpdlg(successMessage));
end
What does the end user see?

Sign in to comment.


Michael Haitz
Michael Haitz on 27 Sep 2018
I had the same problem with a dll generated with Matlab Compiler R2015b. After adding matlabrc.m to the m-file list of my compiler command line, the problem seems to be solved.
  2 Comments
Michael Haitz
Michael Haitz on 21 May 2019
The version from "C:\Program Files\MATLAB\R2012b\toolbox\local\" should be the correct one.
I use the mcc compiler to generate a dll file from my m-files. I just put matlabrc.m in the list of m-files in the command line, e.g.:
"mcc -v -B csharedlib:Main Main.m matlabrc.m file1.m file2.m VerInfoMainXMLS.res"
Then the error disappeared.

Sign in to comment.

Tags

No tags entered yet.

Products


Release

R2008a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!