compiler.runtime.customInstaller无法缩减MCR安装包大小问题咨询
我有一个带单窗口GUI的MATLAB工具箱,用mcc/deploytool生成的独立可执行文件仅7MB,但R2016版本的MATLAB Runtime(MCR)却有700MB,是程序的100倍。得知R2024b新增的compiler.runtime.customInstaller可以创建仅含必要文件的轻量化MCR安装包后,我立刻尝试,但结果很失望:
- 用deploytool生成的R2024b带MCR的安装包达1.2GB,比R2016版本还大了近2倍
- 调用以下代码生成的包大小还是1.2GB:
results = compiler.build.standaloneApplication("myapp.m"); compiler.runtime.customInstaller("myapp_installer", results, 'RuntimeDelivery', 'installer');
我已经遵循了compiler.runtime.customInstaller的官方文档,且我的应用仅使用基础MATLAB功能,requiredMCRProducts.txt显示只需要以下MCR组件:
- 'MATLAB Runtime - Core'
- 'MATLAB Runtime - Graphics'
- 'MATLAB Runtime - Non Interactive MATLAB'
- 'MATLAB Runtime - Numerics'
- 'MATLAB Runtime - Image Processing Toolbox Addin'
为什么compiler.runtime.customInstaller无法缩减安装包大小?我遗漏了什么?
1. 开启构建时的最小化依赖分析
默认情况下,compiler.build.standaloneApplication未启用最小化依赖分析,会默认包含冗余组件,导致后续customInstaller无法有效瘦身。需添加'MinimalDeployment'参数强制精准分析依赖:
results = compiler.build.standaloneApplication("myapp.m", 'MinimalDeployment', true); compiler.runtime.customInstaller("myapp_installer", results, 'RuntimeDelivery', 'installer');
2. 验证实际依赖的组件列表
requiredMCRProducts.txt列出的组件可能未包含隐式依赖:比如Graphics组件可能关联UI框架底层库,Image Processing Toolbox Addin可能依赖基础IO组件。可通过以下命令手动获取实际依赖:
mcrProducts = compiler.build.getMCRProducts(results); disp(mcrProducts);
对比输出结果与requiredMCRProducts.txt,确认是否存在未显式列出的强制依赖组件。
3. 检查Runtime模式配置
确保未默认启用"完整Runtime"模式:
- 在deploytool的「Runtime Settings」中,选择「Custom Runtime」而非「Full Runtime」
- 检查MATLAB偏好设置中的编译默认选项,确认未强制包含完整MCR
4. 考虑R2024b MCR的原生体积增长
R2024b对MCR进行了功能升级(如更新图形渲染引擎、扩展原生函数库),核心组件本身的体积比R2016版本更大。可查看MATLAB安装目录下runtime文件夹中各组件的实际占用空间,确认是否是组件本身的体积增长导致整体包变大。
5. 检查安装包压缩设置
R2024b的deploytool可能默认使用了不同的压缩策略(或未启用压缩),导致安装包体积看起来更大。可手动压缩生成的MCR文件,对比解压后的实际体积与R2016版本MCR的差距是否合理。
内容的提问来源于stack exchange,提问作者FangQ

