强制编译的 Matlab 应用程序使用运行时而不是 Matlab 许可证

问题描述 投票:0回答:3

我的客户有一个无法访问互联网的网络。他们打算购买(很少)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 的咒语或配方。并不是说我有时间这样做,因为这是实现这一目标的非常低效的方法。

由于存在许多环境挑战,反复试验并不是可行的方法,我希望有一种固定的方法可以强制使用 MCR 而不是任何可能存在的 Matlab 许可证。我正在使用 R2015b。

matlab-deployment matlab-compiler
3个回答
0
投票

我正在使用 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

0
投票

TMW 回应:

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

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


0
投票

截至 2023 年 12 月 13 日,此 TMW 页面 表示“要针对 MATLAB Runtime 而不是 MATLAB 运行部署的 MATLAB 代码,请确保您的库路径在任何 MATLAB 目录之前列出 MATLAB Runtime 目录。有关设置环境变量的信息,请参阅设置用于部署的 MATLAB 运行时路径。”

© www.soinside.com 2019 - 2024. All rights reserved.