matlab-deployment - 强制编译 Matlab 应用程序以使用运行时而不是 Matlab 许可证
问题描述
我的客户有一个无法访问互联网的网络。他们打算购买(很少) Matlab 许可证,只是为了我和我的同事的开发工作。但是,对于他们的员工的操作使用,我应该将我的 Matlab 代码编译为 *.exe 文件,这样操作员就不会仅仅为了执行我的 Matlab“应用程序”/“解决方案”而用尽许可证(语言似乎正在改变这些日子)。他们实际上没有mcc
许可证,因此编译将在我所在组织的网络上完成。
问题是当编译的可执行文件运行时,似乎没有一种明显的方法可以强制它使用 Matlab Compiler Runtime (MCR)。如果目标系统上有 Matlab 许可证,它也可以使用它。然而,编译的全部目的是避免使用客户端网络上的少数许可证,以便在需要时可以将这些许可证用于 m 文件开发工作。所以这种情况的独特之处似乎是目标环境最终将同时具有 Matlab 许可证和MCR,以及编译的可执行文件仅使用 MCR 而不是 Matlab 许可证的要求。
Mathworks 正在研究这个问题,但找到解决方案的前景尚不清楚。我希望它不会涉及手动重新调整登录脚本来自定义环境 PATH 变量,因为每当更新登录脚本时它都会中断。我希望有一个解决方案,比如顶级 m 文件中的类似 pragma 的语句,或者一个mcc
开关。然而,在仔细阅读mcc
文档时,除了 之外,没有任何开关将自己显示为可能的候选者-Y license.lic
,并且不清楚如何使用它。
关于客户,我面临的另一个限制是我不想用反复试验来纠缠他们(这不是他们的工作)。由于也没有有效的方式向他们传达电子内容,所以这使得情况变得复杂,因此快速、反复的试错已经不复存在。同样,他们的具有 Matlab 许可证的目标环境还不存在,尽管实现目标的过程正在进行中。这有点像先有鸡还是先有蛋的问题。他们基于我们可以找到挑战解决方案的假设来获取 Matlab,但是当目标环境尚不存在时,很难通过调查解决方案来预先取消假设。
在我所在组织的系统上,我也面临着我无权安装 MCR 的限制。因此,我无法通过反复试验来识别忽略 Matlab 许可证存在并强制使用 MCR 的咒语或配方。并不是说我有时间这样做,因为这是实现这一目标的一种非常低效的方式。
由于存在许多环境挑战,试错法不是要走的路,我希望有一种固定的方法可以强制在可能存在的任何 Matlab 许可证上使用 MCR。我正在使用 R2015b。
解决方案
我正在使用 Matlab 2015b 处理 OS X / Linux 的这种确切部署情况。当您为基于 Unix 的操作系统编译应用程序时,编译器会创建一个在启动时执行的 shell 脚本。我的解决方案是修改此脚本以检查运行时库的存在。例如,在 OS X (macOS) 上:
echo "Setting up environment variables"
if [ -d "/Applications/MATLAB/MATLAB_Compiler_Runtime/v90" ] ; then
echo "Using MCR v8.6 (R2015b) (_Compiler)"
MCRROOT=/Applications/MATLAB/MATLAB_Compiler_Runtime/v90
elif [ -d "/Applications/MATLAB/MATLAB_Runtime/v90" ] ; then
echo "Using MCR v8.6 (R2015b)"
MCRROOT=/Applications/MATLAB/MATLAB_Runtime/v90
elif [ -d "/Applications/MATLAB_R2015b.app" ] ; then
echo "Using MATLAB R2015b application"
MCRROOT=/Applications/MATLAB_R2015b.app
else
echo "No MATLAB libraries found! Install MCR R2015b from:"
echo " http://www.mathworks.com/products/compiler/mcr/"
echo " "
sleep 10
exit
fi
推荐阅读
- c++ - 来自异步服务器的套接字写入——但不读取
- detox - 在阶段与生产中处理测试的环境变量
- javascript - 如何onClick将文本从a复制到剪贴板
使用 JavaScript/jQuery 标记?
- typescript - 如何在 TypeScript 的 Koa 调试模式下将自定义中间件函数记录到控制台?
- javascript - 来自 XMLHttpRequest 文本的 JS ArrayBuffer
- excel - 库存宏 - 结合步骤和while循环?
- node.js - Firebase 部署在 tsc 命令返回错误
- kubernetes - Kubernetes Ingress:为什么我在相同的配置下得到不同的结果,但不同的主机?
- java - 如何解决我的代码中的 java.lang.NumberFormatException: Invalid int: "" 错误?
- python - 从 def __init__() 访问 def clean() 中的变量