强制编译的Matlab应用使用运行时而非Matlab许可证

时间:2018-06-23 20:09:30

标签: matlab-deployment matlab-compiler

我的客户的网络无法访问互联网。他们打算购买(很少)Matlab许可证只是为了我和我的同事的发展。但是,为了便于员工使用,我应该将Matlab代码编译为* .exe文件,以便操作员不会仅仅为了执行我的Matlab“应用” /“解决方案”而用完许可证(语言似乎正在发生变化这些日子)​​。他们实际上没有mcc许可证,因此将在我的本地组织的网络上进行编译。

问题在于,当编译的可执行文件运行时,似乎没有明显的方法来强制其使用Matlab编译器运行时(MCR)。如果目标系统上有Matlab许可证,它也可以使用。但是,编译的全部目的是避免在客户端网络上使用少量许可证,以便在需要时可以将许可证用于m文件开发工作。因此,有关这种情况的独特功能似乎是目标环境最终将同时具有Matlab许可证 MCR,以及要求编译的可执行文件仅使用 MCR而不是Matlab许可证

Mathworks正在研究问题,但是寻找解决方案的前景尚不清楚。我希望它不会涉及手动重新调整登录脚本以自定义环境PATH变量的方法,因为只要更新登录脚本,该操作就会中断。我希望找到一种解决方案,例如顶级m文件中的类似编译指示的语句或mcc开关。但是,在仔细阅读mcc文档时,除-Y license.lic之外,没有任何开关将自己当作可能的候选者,并且不清楚如何使用它。

关于客户,我面临的另一个限制是我不想用反复试验来困扰他们(这不是他们的工作)。由于没有有效的方法向他们传达电子内容,因此变得很复杂,因此快速,反复的试验和错误就排除了。同样,他们的目标环境以及Matlab许可尚不存在,尽管实现目标的过程正在酝酿之中。这有点像鸡和鸡蛋的问题。他们基于可以找到挑战解决方案的假设而使用Matlab,但是当目标环境尚不存在时,很难通过调查解决方案来事先推翻假设。

在我的家庭组织的系统上,我还面临我无权安装MCR的限制。因此,我无法通过反复试验来确定忽略了Matlab许可并强制使用MCR的咒语或配方。不是因为我有时间这样做,因为这是实现此目标的一种非常无效的方法。

由于存在许多环境挑战,因此试错并不是要走的路,我希望有一种罐装方法可以强制对可能存在的任何Matlab许可使用MCR。我正在使用R2015b。

2 个答案:

答案 0 :(得分:0)

我正在使用Matlab 2015b处理OS X / Linux的确切部署情况。当您为基于Unix的OS编译应用程序时,编译器会创建一个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

答案 1 :(得分:0)

TMW的回复:

  

运行使用MATLAB Compiler构建的独立应用程序将不会签出任何许可证,无论是针对已安装的MATLAB Compiler Runtime还是作为MATLAB Compiler安装的一部分而安装的运行时。请注意,安装了未安装MATLAB Compiler的MATLAB的最终用户将不会在其安装中包含编译器运行时库。

     

如果已经安装了MATLAB Compiler Toolbox,则MATLAB将具有一个“运行时”文件夹,其中包含执行独立应用程序所需的DLL。没有MATLAB编译器工具箱,这些DLL将不可用。相反,用户必须安装MCR才能运行独立应用程序...如果用户未安装MATLAB Compiler Toolbox并且希望运行独立应用程序,则无法放弃MCR的安装。