MATLAB 编译java步骤

MATLAB编译java步骤:

(不同版本的MATLAB样式可能不太一样,但是基本流程就是这样的,我是2014版本的,2015版本目前只支持64位操作系统,window暂时没有这样的环境)

1.选择好自己的工作目录,也就是需要编译的文件夹目录

我的是:E:\ProgramFiles\MATLAB\work\roi

2.在命令窗口输入:deploytool;

会弹出一个窗口,选择:librarycompiler

3.选择之后,会弹出一个新的窗口matlabcompiler

左上角有一个窗口,可以选择你需要编译后的语言,

我选的:javapackage

4.在上边中间位置,有一个窗口:addexportedfunction,

添加当前文件夹下,应用程序执行入口那个m文件。

我选择的是:roi.m

等上几秒的时间,在下方,有一个栏目显示:

运行应用程序所需要的文件,这里会自动把所需要的文件加进来。

5.点击右上角按钮:package

开始编译,打包成另外一种语言的程序包,生成包的路径就在当前文件夹下,

这是我本地生成的包路径:

E:\ProgramFiles\MATLAB\work\roi\roi\for_redistribution_files_only/roi.jar

6.语言不同,生成的包格式可能不同。

然后就可以把这个包提供给开发者去调用了。

但是,前提必须是开发者的电脑上安装了MATLAB或者MATLABRuntime,而且2者MATLAB的版本必须一致。

xp环境下,可以正常执行,

centos6下,安装了matlabruntime,设置好了环境变量,我设置的是全局变量etc/profile下:

JAVA_HOME=/usr/java/jdk1.7.0_80

CLASSPATH=.:$JAVA_HOME/lib.tools.jar

PATH=$JAVA_HOME/bin:$PATH

exportJAVA_HOMECLASSPATHPATH

exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/MATLABMCR/MATLAB_Compiler_Runtime/v83/runtime/glnxa64:/usr/local/MATLABMCR/MATLAB_Compiler_Runtime/v83/bin/glnxa64:/usr/local/MATLABMCR/MATLAB_Compiler_Runtime/v83/sys/os/glnxa64

exportXAPPLRESDIR=/usr/local/MATLABMCR/MATLAB_Compiler_Runtime/v83/X11/app-defaults

执行过程中,可能遇到空指针,检查环境变量,并且source/etc/profile,或者重启服务器。

如果遇到libXmu.so.6notfind,

http://pkgs.org/download/libXmu.so.6

下载安装相应版本。

如果发现yum用不了了,试试这个

ldd/usr/lib64/python2.6/site-packages/pycurl.so

linux-vdso.so.1=>(0x00007fff8bbff000)

libcurl.so.4=>/usr/local/MATLAB/MATLAB_Compiler_Runtime/v83/bin/glnxa64/libcurl.so.4(0x00007ff5a34dc000)

libpython2.6.so.1.0=>/usr/lib64/libpython2.6.so.1.0(0x00007ff5a3118000)

libpthread.so.0=>/lib64/libpthread.so.0(0x00007ff5a2efb000)

libc.so.6=>/lib64/libc.so.6(0x00007ff5a2b68000)

libdl.so.2=>/lib64/libdl.so.2(0x00007ff5a2963000)

libutil.so.1=>/lib64/libutil.so.1(0x00007ff5a2760000)

libm.so.6=>/lib64/libm.so.6(0x00007ff5a24dc000)

/lib64/ld-linux-x86-64.so.2(0x0000003b35a00000)

发现动态链接库被覆盖了

这个时候,只需要更新下matlab安装目录的文件名字即可。

大功告成.

遗憾的是,我在linux执行,出现这个问题,

com.mathworks.toolbox.javabuilder.MWException:Undefinedfunction'imfilter_mex'forinputargumentsoftype'double'.

没解决掉(我是在32位机上编译,运行在64位机上,应该和这个有关系)

http://cn.mathworks.com/products/compiler/mcr/index.html

http://www.kankanews.com/ICkengine/archives/160748.shtml