2016-09-02 32 views
1

Java包据我知道,我可以运行.mex通过在Linux(纠正我,如果我错了)安装Matlab的运行在Windows上生成的在Linux上的文件。但是如果我想使用一个MATLAB生成的java包(在Windows上,在Linux上生成)(如Ubuntu),该怎么办?使用MATLAB(Windows)中生成的Linux

目的:

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

使用Linux的托管servlet,它需要从Android的一些投入,不要在JSON或文本的条款处理返回的答案。现在我的java软件包是使用Windows机器生成的,而且我迷路了。

从我所知,这代码转换 - servlet的部署一次的做法是成本比MATLAB生产服务器有效,因为我们必须一次购买许可的特定产品。记住许可阶段是在我们测试之后,这种方法是否给我们预期的结果。

规格:

  • 的Windows 10

  • MATLAB 2016a(试行)

  • MATLAB产品(编译/ SDK,信号处理/音频处理工具箱)

  • 使用JDK 1.7.x制作的包(完全匹配MATLAB jdk/jre ver锡永在Windows)

  • Ubuntu的16桌面(与Oracle JDK 8_101安装,安装也MATLAB运行时,我还可以与JDK 7.x的工作(同MATLAB生成包时在Windows上使用))

问题:

  • 我怎么能当我创建一个Java程序使用Java包在Linux呢?

  • 什么软件+许可证需要的可能?

  • 我应该安装MATLAB Linux计算机,生成Java包的Linux计算机,并使用该包装在Java程序中打开相同的Linux机器? (我想我需要重新申请许可证的话)

  • 是否有任何其他的方法呢?我错过了什么吗?通过MATLAB编译SDK产生

回答

3

Java包是一般跨平台 - 然而,他们可致电mex文件或其他库,这是特定于平台的,如果他们这样做的Java包作为一个整体将最终成为平台特定的。

您是否完全清楚您是否拨打mex文件;您可能会在没有意识到的情况下调用特定于平台的库(例如,信号处理工具箱可能会向某些库调用某些操作)。

此外,您对“能够在Linux上运行mex文件”的评论感到困惑 - mex文件不是跨平台的,并且不使用MATLAB运行时间。

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

我错过了什么吗?

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

MCR需要相当长的时间才能启动(几乎和MATLAB一样长)。因此,每次电话会花费相当长的时间,只是由于MCR启动时间。

所以你可以通过创建某种工具工具来启动一个MCR并保存它,并通过请求并返回servlet的答案。

但是,你只有一个MCR--如果你一次得到多个请求会发生什么?他们将排队(或放弃),并不会扩展。因此,您需要改进您的实用工具,以便管理MCR池,并将请求传递给一个免费的请求,并在它们进行时对其进行负载平衡。

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

而且你需要一些额外的东西,使你能够方便地管理所有的东西。一旦你完成了所有这些(这将很难),你会意识到你现在已经写了很多MATLAB的生产服务器。我知道这很贵,但在您提交您正在考虑的解决方案之前,您可能需要重新审视它。

+0

让我们把mex混淆在一边,当我打包时,它会自动检测依赖文件,并且我认为它将它们包含在包中。因此,如果我在Linux上使用MCR,那么我可以在我的Java应用中使用它们,例如servlet? 然后我将不得不编写MATLAB PS,显然我不是。 – Talha

+1

如果您在Windows上创建MEX文件,它们将是Windows特有的。如果您在Windows上编译和打包Java组件,它将检测这些依赖关系并将它们包含在打包的Java组件中。 Java组件将是Windows特有的。你将无法在Linux上运行它。 –