Why do I get an error saying "Undefined function or variable 'matlabrc'" when executing a program that uses a MATLAB-compiled shared library?
이전 댓글 표시
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'
채택된 답변
추가 답변 (2개)
Patrick Rollin
2014년 10월 15일
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.
댓글 수: 1
KAE
2020년 4월 29일
This needs to be in the documentation, in a location that users can easily find it. I would have been in real trouble without your answer.
Image Analyst
2021년 1월 8일
2 개 추천
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
Jason
2021년 1월 15일
OK, so I have added all the files first before compiling.
However, on the target computer I am getting an error loading a specific dll (thats on the target PC)
Error while loading PI_GCS2_DLL_x64.dll.
The PI_GCS2_DLL_x64.dll was assumed to have the following path:
C:\ProgramData\PI\GCSTranslator\PI_GCS2_DLL_x64.dll
The PI MATLAB DRIVER GCS2 either could not find or could not use the "PI_GCS2_DLL_x64.dll".
Make sure you have installed the newest driver for your PI controller and look at the PI MATLAB DRIVER GCS2 Manual in chapter "Troubleshooting" headword "PI GCS2 DLL" for known problems and fixes for problems while loading the PI_GCS2_DLL_x64.dll.
Additional Information: MATLAB itself raised the following error:
The specified module could not be found.
But it is there.

Image Analyst
2021년 1월 16일
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?
카테고리
도움말 센터 및 File Exchange에서 C Shared Library Integration에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!