header=['@relation m6a_dbn',char(10),attribute,'@attribute class {0,1}',char(10),'@data',char(10)];
S = [header, S];
FID = fopen('feat.arff', 'w');
if FID == -1, error('Cannot open file'); end
fwrite(FID, S, 'char');
fclose(FID);
end
复制代码
[attach]3468[/attach]
选择要编译的语言,点击+好选择编写好的主函数脚本,更改生成的jar名
[attach]3470[/attach]
library compile package会自动选择函数脚本依赖的文件,但是真得会有可能并没有那么智能,特别是我们这种复杂的第三方包。
[attach]3469[/attach]
点击右上角package对号按钮,开始一段漫长的编译。
tips:
1、不要涉及mex等平台特定性文件,默认编译的jar文件是平台不相关的,这样部署到linux网站才有可行性,所以不要涉及平台特定性文件。
2、函数内涉及调用mat怎么办,没事,library compile package会智能关联依赖,一并打包。
3、函数外涉及mat调用咋办,就是java调用mat,这个有一个叫JMatIO的可以用。https://sourceforge.net/projects/jmatio/
4、涉及二次存储的(比如本例中先使用matlab自带的csvwrite存储成csv文件,再读取csv略改变成arff文件),要注意,library compile package会自动把中间文件打包进jar中,这样会导致程序出错,因为每次调用jar文件,程序都是对jar内部存储中间文件做修改,方法是打包时删点文件夹中的中间文件和结果文件,然后在打开library compile package,这样library compile package就不会自动关联依赖,不删除直接在依赖列表中删除会报错。
点击这个启动library compile package
5、编译成功后,运行报错可能会提示少什么类,在第三方包中找到包含相应类的m文件,添加到依赖文件列标中。
编译成功后会生成三个文件夹:
“-for_redistribution包含用于安装应用程序和MATLAB Runtime的文件,可以将这份文件复制到没有安装Matlab的电脑上,安装该文件,在安装过程中会提示要安装独立的共享库MATLAB Runtime,安装之后不需要Matlab也可以运行编译后的Matlab的程序或者元件(The MATLAB Runtime is a standalone set of shared libraries that enables the execution of compiled MATLAB applications or components on computers that do not have MATLAB installed)。
-for_redistribution_files_only文件夹包含应用程序的重新发布所需的文件。这些文件可以分发到那些有MATLAB或者有 MATLAB Runtime 的用户的电脑上。
-for_testing文件夹包含创建的所有由MCC创建的文件,像二进制文件和jar,头和源文件,使用这些文件来测试安装。 -PackagingLog.txt是由编译器生成的日志文件。 如果.jar库中的内容不熟悉也可以找到doc下的html文件夹,打开index.html,里面有Javadoc参考资料。” --marine0131
我们使用for_redistribution_files_only或者for_testing的jar文件进行下一步。
In installer_input2.txt:
destinationFolder=Path/To/Destination/Folder/
fileInstallationKey=xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
agreeToLicense=yes
outputFile=/tmp/matlab.log
mode=silent
activationPropertiesFile=~/matlabSetup/activate.ini
licensePath=~/matlabSetup/license.lic
product.MATLAB
product.MATLAB这行是设置只安装matlab主程序,默认全安装可以去掉这行。
In activate.ini:
isSilent=true
activateCommand=activateOffline
licenseFile=~/matlabSetup/license.lic
license.lic文件为crack文件夹中的license-standlone.lic
ssh中执行:
cd /media/mathworks
sudo ./install -mode silent -inputFile ~/matlabSetup/installer_input2.txt
即可。
配置jdk,确保matlab命令行中输入getenv JAVA_HOME能得到正确的javahome路径。
和windows一样装有matlab就不用装mcr,但是必须让程序找到runtime库,不配置直接运行jar会报这个最普遍出现的错误:
Failed to find the library libmwmclmcrrt.so.XXXX
很多人又装了matlab又装了mcr,然后配置了LD_LIBRARY_PATH解决了问题,官方文档也说要配置LD_LIBRARY_PATH,但是啥也没说一笔带过。
其实缺什么补什么就可以,使用find / -name libmwmclmcrrt 找到这个so链接文件,然后把路径添加到LD_LIBRARY_PATH,和windows的Path中的runtime\win64是一个作用。
LD_LIBRARY_PATH不能随便改,这个东西是先与系统默认的库文件加载自定义库文件的,如果先加载了不兼容C库的文件之类的,整个系统都会直接崩掉,并启动不了!(相当于删库跑路,之前有过惨痛教训)
改了LD_LIBRARY_PATH,ssh上基本就可以运行jar了。
4、编写网站配合tomcat上传运行jar
接下来就是利用jar配合java编写web后台,然后部署网站了,
但是,linux的ssh里能运行不一定tomcat里能运行,java后台代码里要利用ProcessBuilder的environment 方法再设置一遍LD_LIBRARY_PATH
否则web还会报Failed to find the library libmwmclmcrrt.so.XXXX的错。