Matlab Compiler Runtime(MCR)
“MATLAB Runtime 是一组独立的共享库,可用于在未安装 MATLAB 的计算机上执行编译后的 MATLAB 应用程序或组件。 MATLAB, MATLAB Compiler与 MATLAB Runtime 配合使用,可以快速、安全地创建和分发数值应用程序或软件组件。”
MCR还可以配合matlab的Library Compile package编译matlab代码为c++、java、python等语言。
所以我们可以把使用library compile package**把matlab程序编译成jar,然后配合tomcat发布javaweb网站。**
之前使用matlab程序做网站的做法都是在server上装一个matlab,web的java后台调用系统命令启动matlab,执行matlab脚本,存储结果web在使用java代码调用结果文件。这样做网站响应速度会很慢,而且占web server的很大资源。
使用mcr要好很多。
下边我们来动手实践吧(matlab2017a,windows8.1,server:ubuntu14.04)加粗显示的都是趟过的报错坑:
首先我们要明确我们的任务,我们的最终目标是要把依赖第三方工具包(一个深度信念网络包)的matlab程序编译成jar(涉及一个很复杂的第三方包,不知道能不能成),混合到web的java后台代码中。(成的话,我们就算实践了mcr最复杂的用法)
所以:
1. 在windows本机上使用library compile package编译matlab代码
2. 先在windows平台上配置环境试验是否可以运行jar
3. 在linux服务器上配置环境试验是否可以运行jar
4. 编写网站配合tomcat上传运行jar
1、在windows本机上使用library compile package编译matlab代码
首先只要使用matlab编译java,都是要配置和matlab相对应的jdk的
在Matlabd的Command Windows中输入version -java
没错,最新的matlab2017a也是 ‘Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode’
所以装1.8的,可以下载一个1.7zip版,配置环境变量
打开cmd 分别输入命令java -version和javac -version分别验证编译和运行版本。
javac没配置好,编译jar包是要报错的。
jdk版本版本不对是要报错的。
编译jar时内存不足也是会报错的:Failed to embed unzip in your applicationUpdate resource failed: 00000000CE555B5,Failed to embed installer splash screen …toolbox\compiler\Resources\default_splash.png. Update resource failed: 0000000037E55CB0
编写主函数脚本,这个脚本要做到对外提供一个接口之类的作用,比如我们这个文件是根据用户输入的文件路径,生成深度信念网络跑出来的特征:
function []=getDbnFeat(file_path)
[tits, seqs]=fastaread(file_path);
num=length(tits);
len=length(char(seqs(1)));
Y=zeros(num,1);
X=zeros(num,len*4);
%onehot
for i=1:num
str=char(tits(i));
temp=strsplit(str,'|');
label=char(temp(2));
if label=='1'
Y(i)=