Linux下MatlabCompilerRuntime的安装和使用
1MCR简介
MCR之前是 Matlab Component Runtime的缩写,后更名为Matlab Compiler Runtime。MCR实际上是一组独立的共享库,也即是常说的动态连接库,所起的作用是使得你可以执行编译过的matlab文件,与matlab提供的另外两个库----数学库和图形库不同之处在于它支持matlab语言所有的特性,而不仅仅是数学计算和图形功能。换句话说他的作用就是给编译后的matlab文件执行提供一个环境。
并且MCR是一个免费的版本,不需要购买Matlab Full Version的License,就可以运行Matlab程序。
2MCR安装和使用
2.1下载MCR
下载地址:http://www.mathworks.com/products/compiler/mcr/。
本例中选择R2012a (7.17)版本,因为MCR的版本需要和Matlab编译器的版本一致才能正常运行。下载文件为:MCR_R2012a_glnxa64_installer.zip。
2.2安装MCR
本文只讨论Linux版本MCR的安装和使用。
首先,将下载的安装文件zip包上传到Linux服务器上的某个目录下,以/tmp/为例;
然后依次执行下面的命令:
进入目录:cd /tmp
解压缩:unzip MCR_R2012a_glnxa64_installer.zip -d MCR_R2012a_glnxa64_installer
进入子目录:cd MCR_R2012a_glnxa64_installer
安装:./install -mode silent -agreeToLicense yes
当出现下面的字样的时候,就表示MCR安装成功了:
Exiting with status 0
End – Successful.
Finished
2.3配置MCR
当安装成功的时候,会提示配置一些系统环境变量,下面详述。
在/etc/profile文件的最后添加如下几行环境变量(如果安装的MCR版本不一样的话,路径可能会有不同,需要注意修改):
export MCR_HOME=/usr/local/MATLAB/MATLAB_Compiler_Runtime
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: $MCR_HOME/v717/runtime/glnxa64:$MCR_HOME/v717/sys/os/glnxa64:$MCR_HOME/v717/sys/java/jre/glnxa64/jre1.6.0/lib/amd64/native_threads:$MCR_HOME/v717/sys/java/jre/glnxa64/jre1.6.0/lib/amd64/server:$MCR_HOME/v717/sys/java/jre/glnxa64/jre1.6.0/lib/amd64
export XAPPLRESDIR=$MCR_HOME/v717/X11/app-defaults
然后执行下面的命令使之生效:
source /etc/profile
2.4使用MCR
下面举一个简单的例子来说明如何使用MCR,至于更高级的用法请继续深入研究。
2.4.1编译.m文件
MCR仅仅提供了一个运行环境,并没有提供编译环境,因此还需要在安装了Matlab编译环境的服务器上对.m文件进行编译。
创建一个简单的main.m文件,文件内容如下:
clear all;clc;
diary('/tmp/matlab_log.txt');
diary on;
disp(['begin TIME...' datestr(now,31)]);
a = 1985;
b = a * 3;
disp([num2str(a) ' * 3 = ' num2str(b)]);
disp(['end TIME...' datestr(now,31)]);
diary off;
quit;
这个.m文件仅仅进行一些简单的Matlab运算,并将结果打印到/tmp/matlab_log.txt中,执行完毕之后就退出。
执行下面的命令对其进行编译:
mcc -mv main.m
然后将会产生两个文件:main和run_main.sh
其中main是编译后的二进制文件,run_main.sh的是一个bash脚本文件,该脚本首先会设置一些环境变量然后执行main文件。两个文件的区别是:如果已经配置了前文中的环境变量的话,直接执行main文件即可,没有配置环境变量的话就需要执行run_main.sh。
2.4.2运行.m文件
将上步骤编译产生的main和run_main.sh拷贝到安装了MCR的服务器上,然后就可以直接执行它们来运行Matlab程序了。
执行./main或者./run_main.sh,就会产生类似下面的结果:
begin TIME...2014-01-29 11:07:32
1985 * 3 = 5955
end TIME...2014-01-29 11:07:32