我有一个matlab引导程序我想编译(打包)。 该程序未使用曲线拟合工具箱。
尽管如此,编译器还是抱怨缺少许可证。
mcc -C -o ...
Compiler version: 5.0 (R2013b)
Dependency analysis by DEPFUN.
Processing C:\Program Files\MATLAB\R2013b\toolbox\matlab\win64\mcc.enc
Processing C:\Program Files\MATLAB\R2013b\toolbox\curvefit\win64\mcc.enc
Depfun error: 'License checkout failed.
License Manager Error -4
Maximum number of users for Curve_Fitting_Toolbox reached.
如何消除编译时的依赖?
mcc
文件,
-N Clear Path
Passing -N effectively clears the path of all folders except the following core folders
(this list is subject to change over time):
matlabroot\toolbox\matlab
matlabroot\toolbox\local
matlabroot\toolbox\compiler\deploy
It also retains all subfolders of the above list that appear on the MATLAB path at compile time.
Including -N on the command line lets you replace folders from the original path,
while retaining the relative ordering of the included folders.
All subfolders of the included folders that appear on the original path are also included.
In addition, the -N option retains all folders that you included on the path that are not under matlabroot\toolbox.
换句话说,您可以清除路径中的所有文件夹,只保留核心 MATLAB 文件夹。
如果您想包含一些工具箱文件夹,您可以使用
-a
选项:
mcc ... -a C:\Program Files\MATLAB\R2013b\toolbox\...\...
就我个人而言,我只是暂时重命名我不需要的工具箱文件夹。
只需手动导航到“matlabroot() oolbox\”并重命名,例如“signal”->“signal_”。
令人惊讶的是,可以通过脚本调用 mcc() 来完成同样的操作 - 这些文件夹中几乎没有文件被 matlab.exe 锁定。
这个方法听起来不像是一个“解决方案”,当然它只是一个“快速而肮脏的解决方法”。但是,对我来说,它似乎有效(R2015a)。
请注意,您可以使用 7z 轻松检查“部署的”dll(或 exe)中实际包含的内容。包括从工具箱添加的文件 - 请参阅“my.dll.text oolbox\”
PS1: 根据我的经验,“-N”删除了some不相关的东西。不是全部。 此外,当使用“-N”时,你应该小心地用“-I”添加你需要的东西。
PS2: 在由deploytool()创建的“.prj”文件中,有一些听起来相关的东西:
<matlab>
<root>D:\Program Files\MATLAB\MATLAB Production Server\R2015a</root>
<toolboxes>
<toolbox name="matlabcoder" />
...
</toolboxes>
...
</matlab>
但我没有检查过,这是否真的控制mcc使用女巫工具箱。