2016-09-02 14 views
1

Linux上でMatlab Runtimeをインストールすることで、Linux上で生成された.mexファイルを実行することができます。しかし、Windowsで生成されたMATLABで生成されたJavaパッケージをLinux(Ubuntuのような)上で使用したいのですが?MATLAB(Windows)を使用してLinuxでJavaパッケージを生成

目的:

私はオーディオ処理を使用して機能をテストする必要があります。テストが成功すれば、必要な製品を購入します。要求されたライセンスにはマシン固有の制限があるため、Windowsマシン上でテストJavaコードを生成することができます。アプリケーションはAndroidにデプロイされるので、Googleから学びました実行するにはmatlabランタイムが必要であり、変換/生成コードを使用するにはコンパイラが必要です。 AndroidシステムにはMCRや単純なMatlab Runtimeのインストールがサポートされていないため、このソリューションに移行しました。

アンドロイドからの入力が必要なサーブレットをホストするLinuxを使用して、jsonやテキストに関してリターンアンサーを処理します。今、私のJavaパッケージは、Windowsマシンを使用して生成され、私は紛失しています。

このコード変換サーブレットのデプロイアットアプローチは、MATLABプロダクションサーバよりもコスト効率がよく、特定の製品に対して一度ライセンスを購入する必要があるためです。ライセンスの段階は、このアプローチが私たちに望ましい結果をもたらしているかどうかをテストした後です。

仕様:

  • のWindows 10

  • のMATLAB 2016a(試用版)

  • MATLAB製品(コンパイラ/ SDK、信号処理/オーディオ処理ツールボックス)

  • JDK 1.7.xを使用して作成されたパッケージ(MATLAB jdk/jre ver Windows上のシオン)

  • Ubuntuの16デスクトップ(また、MATLABランタイムがインストールされてインストールされたOracle JDK 8_101で、私もパッケージを生成するとき、MATLABは、Windows上で使用したのと同じ(JDKの7.xで動作することができます))

質問:

  • 私はJavaプログラムを作成するときにどのように私は、LinuxでこのJavaパッケージを使用することができますか?

  • 可能にするために必要なソフトウェア+ライセンスはありますか?

  • LinuxマシンでMATLABをインストールする必要がありますか?LinuxマシンでJavaパッケージを生成し、そのパッケージをJavaプログラムで使用しますか? (私は再びライセンスを要求する必要があると思う)

  • 他の方法はありますか?何か不足していますか?MATLABコンパイラSDKによって生成

答えて

3

Javaパッケージは、一般的なクロスプラットフォームである - しかし、彼らは、プラットフォーム固有のものmexファイル、または他のライブラリを呼び出すことができ、彼らは全体の意志としてJavaパッケージをすれば最終的にはプラットフォーム固有です。

mexファイルを呼び出すかどうかは完全にはっきりしていません。これを認識せずにプラットフォーム固有のライブラリを呼び出すことができます(たとえば、Signal Processing Toolboxがライブラリの一部のオペレーションを呼び出す可能性があります)。

さらに、「mexファイルをLinux上でLinux上にインストールすると、Windows上でMATLAB RuntimeをLinuxにインストールする」というご意見は混乱しています - mexファイルはクロスプラットフォームではなく、MATLABを使用しませんランタイム。

プラットフォームに関しては、Windows固有のmexファイルやライブラリを呼び出さない限り、Linux上のWindowsで生成されたJavaパッケージを使用することができます。しかし、Linuxで生成した場合、その問題を解決することができるため、コンパイルと実行に同じプラットフォームを使用する方が簡単になります。これを行うには、MATLABライセンスをLinuxマシンに再割当てするのはかなり簡単です。

何か不足していますか?

はい:あなたがやることを提案している方法は、うまく調整できません。 MATLAB Compiler SDKで生成されたJavaパッケージと共にLinuxサーバーにJavaサーブレットがある場合、サーブレットを呼び出すたびにJavaパッケージが呼び出され、MATLAB Compiler Runtime(MCR )、MATLABコードを実行し、サーブレットへの応答を返してから、MCRをシャットダウンします。

MCRは起動にかなりの時間がかかります(MATLABとほぼ同じくらい長く)。したがって、MCRの起動時間のために、それぞれの呼び出しに時間がかかります。

これで、MCRを起動してそこに保持し、要求を渡してサーブレットに回答を返すユーティリティツールを作成することで回避できます。

しかし、1つのMCRしかありません。一度に複数のリクエストを受け取ったらどうなりますか?それらはキューに入れられ(またはドロップされ)、スケールされません。そのため、ユーティリティツールを改善して、MCRのプールを管理し、要求を無料のものに渡し、ロードバランシングを行うようにする必要があります。

しかし、MCRがクラッシュしたり、メモリが不足したりするとどうなりますか?ユーティリティツールは、その可能性を監視し、クラッシュしたものを再起動する必要があります。

さらに、これらのすべてを便利に管理できる余分なものが必要です。

これですべてが完了したら(これは難しいでしょう)、あなたは今かなり書かれたMATLAB Production Serverを持っていることに気付くでしょう。私はそれが高価だと知っていますが、あなたが検討しているソリューションにコミットする前にもう一度見てみたいかもしれません。

+0

私はパッケージング時にmexの混乱を脇に置いて、それが自動的に依存するファイルを検出し、パッケージに含めていると仮定します。だから私はLinux上でMCRを持っているなら、私はサーブレットのような私のJavaアプリケーションでそれらを使用することができるでしょうか? そして、私は明らかにMATLAB PSを書く必要があります。 – Talha

+1

MEXファイルをWindows上に作成すると、Windows固有のMEXファイルになります。 Windows上でJavaコンポーネントをコンパイルしてパッケージ化すると、それらの依存関係が検出され、それらがパッケージ化されたJavaコンポーネントに組み込まれます。 JavaコンポーネントはWindows固有のものになります。 Linux上で実行することはできません。 –

関連する問題