有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

目标:

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

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

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

规格:

  • Windows 10

  • MATLAB 2016a(试用版)

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

  • 使用JDK1.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程序中使用该包吗?(我想我需要再次申请许可证)

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


共 (1) 个答案

  1. # 1 楼答案

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

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

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

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

    Am I missing something?

    是的:你提议的做事方式不太可能很好地扩展。如果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生产服务器。我知道这很昂贵,但在承诺使用您正在考虑的解决方案之前,您可能想再看一眼