为什么我得到一个错误说“未定义的函数或变量matlabrc”在执行一个程序,使用一个MATLAB-compiled共享库吗?

595(30天)
我想使用一个MATLAB-compiled共享库在c++程序中。没有问题,当我使用相同的代码库编译使用MATLAB编译器4.7 (R2007b)。然而,当我重新编译所有MATLAB库使用MATLAB编译器4.9 (R2008b),然后执行相同的程序,<库名>初始化()函数失败有以下错误:
? ? ?未定义的函数或变量“matlabrc”

接受的答案

MathWorks支金宝app持团队
MathWorks支金宝app持团队 2022年11月28日
编辑:MathWorks支金宝app持团队 2022年11月29日
从MATLAB R2008a(或MATLAB编译器4.8),周大福数据现在是自动嵌入在C / c++中直接二进制文件(例如,共享库,可执行文件)默认情况下。为了覆盖这个默认功能,您必须使用编译“世纪挑战集团”和“c”选项。这个选项可以防止部署档案(例如,周大福文件)被嵌入二进制文件。
在指定的错误消息,没有找到“matlabrc”功能。“matlabrc”通常包括在周大福存档,所以你可能会收到这个错误如果应用程序无法找到CTF档案。在构建一些应用程序在某些版本构建程序,共享库参与过程可能(即“剥夺”。,削减某些数据)。如果嵌入式周大福档案共享库是剥夺了在这个过程中,驱动程序的应用程序可能无法找到CTF数据执行期间。
如果您的应用程序构建过程执行这样一个过程,请与“c”选项编译,这将防止周大福文件嵌入二进制文件。
另一个解决方法是删除CTF提取文件夹,并再次运行的EXE编译应用程序。如果“MCR_CACHE_ROOT”环境变量没有设置和您使用的是Windows机器上,周大福提取位置可以在下面找到临时目录:
C:\Users\【用户名】当地\ AppData \ \ Temp \[用户]\ mcrCache(版本)
否则,这些信息将被保存到指定的位置“MCR_CACHE_ROOT”环境变量。确保Windows不移除文件在这个临时目录,你可以设置“MCR_CACHE_ROOT”环境变量,使之指向non-temporary目录有写权限。
如果这两个解决方案解决问题,遵循这些额外的故障排除步骤,之前发现//www.tatmou.com/help/compiler/index.html:\ n \ n
1)确保您的应用程序运行在MATLAB(没有编译)没有这个错误。
2)确保MATLAB启动没有这个错误。
3)验证生成可部署归档文件包含一个名为matlabrc.m的文件
4)验证生成的代码(在“_mcc_component_data。c" file) adds the deployable archive folder containing matlabrc.m to the MATLAB runtime path
5)删除“* _mcr”文件夹并重新运行应用程序。
6)重新编译应用程序。

更多的答案(3)

帕特里克转入
帕特里克转入 2014年10月15日
我有这个问题源于一个完美的工作通过MCR2013a Matlab可执行(v8.1)…有一天它停止工作。
我解决了这个问题(对于Windows 7 64位):
1)删除Matlab运行时编译器临时缓存文件夹。
例如(C: \用户当地\ Temp \[用户]\ AppData \ \[用户]\ mcrCache(版本))
2)重复执行手动重建所需的缓存文件夹。
这个问题每次re-arises我简单地重复这两个步骤,我回来了。
欢呼。
14日的评论

登录置评。


图像分析
图像分析 2021年1月8日
告诉我如果MCR提取的技术支持金宝app
C:\Users\【用户名】当地\ AppData \ \ Temp \[用户]\ mcrCache(版本)
喜欢它 正常情况下 ,因为它是在“临时”文件夹,Windows会偶尔在那里和删除文件,以腾出空间。如果一个文件被删除,这将产生错误。如果你删除这个文件夹,然后再次运行应用程序时,会看到临时文件夹是失踪,重建,恢复丢失的文件,从而让它工作。
在未来,为了避免Windows删除这些文件,你可以部署应用程序提取MCR /清洁技术基金 non-temporary 你有写权限的文件夹。这样,Windows不会接触到文件。要做到这一点,你需要设置一个系统级的环境变量。所以打开环境变量控制面板,使一个系统级别的变量称为MCR_CACHE_ROOT一些文件夹,你可以访问,等等
MCR_CACHE_ROOT = C:\Users\Public\Documents\MATLAB\MCR
您的应用程序将提取周大福,文件夹。似乎每个应用都有自己的子文件夹在文件夹中。
2的评论
图像分析
图像分析 2021年1月16日
就在你试图调用loadlibrary()文件名,试试这个:
如果~ isfile (fullFileName)
%文件未找到。
errorMessage = sprintf (错误:DLL文件未找到:\ n % d ',fullFileName);
流(“% s \ n”,errorMessage);
uiwait (errordlg (errorMessage));
其他的
successMessage = sprintf (“成功!”我发现这个DLL文件“% s”。,fullFileName);
流(“% s \ n”,successMessage);
uiwait (helpdlg (successMessage));
结束
终端用户看到什么?

登录置评。


迈克尔Haitz
迈克尔Haitz 2018年9月27日
我有同样的问题,采用Matlab编译器生成一个dll R2015b。添加matlabrc之后。m m文件列表我的编译器命令行,问题似乎解决了。
2的评论
迈克尔Haitz
迈克尔Haitz 2019年5月21日
版本从“C: \ Program Files \当地MATLAB工具箱\ R2012b \ \ \”应该是正确的。
我使用了mcc m-files编译器生成一个dll文件。我只是把matlabrc。m m-files列表中的命令行,例如:
“mcc - v - b csharedlib:主要Main.m matlabrc.m file1。m file2。m VerInfoMainXMLS.res”
然后消失的错误。

登录置评。

类别

找到更多的在C共享库集成帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!