2016-09-02 29 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上運行它。 –