Linux下利用MATLAB(Windows)生成Java包

Linux下利用MATLAB(Windows)生成Java包,java,linux,matlab,Java,Linux,Matlab,据我所知,我可以在Linux上运行在Windows上通过在Linux上安装Matlab Runtime生成的.mex文件(如果我错了,请纠正我)。但是如果我想使用MATLAB生成的java包,它是在Windows和Linux(比如Ubuntu)上生成的呢 目标: 我必须测试一个使用音频处理的功能。如果测试成功,我们将购买我们需要的产品。目前,我在Windows上获得了请求的许可证,由于请求的许可证有特定于机器的限制,我能够在我的Windows机器上生成一些测试java代码,现在应用程序将部署在a

据我所知,我可以在Linux上运行在Windows上通过在Linux上安装Matlab Runtime生成的.mex文件(如果我错了,请纠正我)。但是如果我想使用MATLAB生成的java包,它是在Windows和Linux(比如Ubuntu)上生成的呢

目标:

我必须测试一个使用音频处理的功能。如果测试成功,我们将购买我们需要的产品。目前,我在Windows上获得了请求的许可证,由于请求的许可证有特定于机器的限制,我能够在我的Windows机器上生成一些测试java代码,现在应用程序将部署在android上,因此我从google了解到,它需要matlab运行时来运行,或者需要编译器来使用转换/生成的代码。Android系统没有MCR或简单的Matlab运行时安装支持,所以我转向这个解决方案

使用linux托管从android获取一些输入的servlet,并以json或文本形式处理返回的答案。现在我的java包是用Windows机器生成的,我迷路了

据我所知,这种代码转换servlet部署一次的方法比MATLAB生产服务器更具成本效益,因为我们必须为特定产品购买一次许可证。请记住,授权阶段是在我们测试这种方法是否能给我们带来期望的结果之后

规格:

  • 视窗10

  • MATLAB 2016a(试用版)

  • MATLAB产品(编译器/sdk、信号处理/音频处理工具箱)

  • 使用JDK 1.7.x制作的包(与Windows上的MatlabJDK/jre版本完全匹配)

  • Ubuntu 16桌面(安装了Oracle jdk 8_101,也安装了MATLAB Runtime,我还可以使用jdk 7.x(与Windows上生成软件包时使用的MATLAB相同))

问题:

  • 当我创建java程序时,如何在Linux中使用这个java包

  • 需要哪些软件+许可证才能实现

  • 我应该在Linux机器上安装MATLAB,在Linux机器上生成Java包,并在同一台Linux机器上的Java程序中使用该包吗?(我想我需要再次申请许可证)

  • 还有其他方法吗?我错过什么了吗


由MATLAB Compiler SDK生成的Java包通常是跨平台的-但是,它们可以调用平台特定的
mex
文件或其他库,如果它们这样做,Java包作为一个整体将最终成为平台特定的

您不完全清楚是否正在调用
mex
文件;您可能正在调用特定于平台的库,而没有意识到这一点(例如,信号处理工具箱可能会调用某个库来执行某些操作)

此外,您关于“能够在Linux上运行通过在Linux上安装MATLAB运行时在Windows上生成的
mex
文件”的评论令人困惑-
mex
文件不是跨平台的,而且根本不使用MATLAB运行时

因此,对于平台,您可以使用Linux上Windows上生成的Java包,只要它不调用任何Windows特定的
mex
文件或库。但是,如果您在Linux上生成它,您可以排除这个问题,因此,如果您使用相同的平台进行编译和执行,将更容易。将MATLAB许可证重新分配给Linux机器应该相当容易

我错过什么了吗

是的:你提议的做事方式不太可能很好地扩展。如果Linux服务器上有一个Java servlet和一个由MATLAB编译器SDK生成的Java包,那么无论何时调用servlet,它都会调用Java包,Java包将启动MATLAB编译器运行时(MCR),运行MATLAB代码,将答案返回给servlet,然后关闭MCR

MCR需要相当长的启动时间(几乎与MATLAB一样长)。因此,由于MCR启动时间的原因,每次呼叫都需要相当长的时间

因此,您可以通过创建某种实用工具来解决这个问题,该工具将启动MCR并将其保存在那里,并将请求传递给servlet并将答案返回给servlet

但是你只有一个MCR——如果你一次收到多个请求会怎么样?它们将排队(或丢弃),并且无法扩展。因此,您需要改进您的实用工具,以便它管理一个MCR池,并将请求传递给一个免费的MCR池,从而在运行过程中实现负载平衡

但如果MCR崩溃或内存不足,会发生什么?实用工具将需要监控这种可能性,并重新启动任何崩溃的工具

你需要一些额外的东西,使你能够方便地管理所有这些东西


一旦您完成了所有这些(这将很困难),您就会意识到您现在已经编写了MATLAB生产服务器。我知道它很昂贵,但在提交您正在考虑的解决方案之前,您可能想再看一看。

让我们把mex混淆放在一边,当我打包时,它会自动检测依赖文件,我假设它在包中包含它们。所以,如果我在Linux上有MCR,我将能够在java应用程序中使用它们,比如servlet?然后我必须编写MATLAB PS,显然我不是。如果你在Windows上创建MEX文件,它们将是特定于Windows的。如果随后在Windows上编译和打包Java组件,它将检测这些依赖项并将它们包含在打包的Java组件中。Java组件将是特定于Windows的。您将无法在Linux上运行它。