在 MATLAB 6.5 中 int8, uint8, int32 这种函数是采用截断尾数的方式取整,在 MATLAB 7.9 中采用的是取就近整数的方式。
使用 MATLAB 内置的符号计算工具箱(Symbolic Math Toolbox),会返回如下错误:
??? Error using ==> mupadinit at 35
Unable to initialize kernelError in ==> mupadengine.mupadengine>mupadengine.evalin at 117
[res,status] = mupadmex(statement,8);
这是和安全卫士360有冲突,将360及其保险箱完全卸载并重启后问题解决。
这个问题已经出现一段时间了,但是在 360 v5.1.1 版本仍没有解决,我在 MATLAB 2008b 和 2009a 中都遇到此问题。
目前最简单的解决方案就是卸载360相关程序,有人说卸载后再重装360可以解决,但是我只要一安装360问题就出现。
一个 GUI 程序在编译运行后,会生成一个 DOS 窗口,用来显示中间运行结果,系统信息和错误信息。有的时候它很影响 GUI 程序的美观,现在我们希望不生成这个窗口。
具体的方法参考:http://groups.google.com/group/comp.soft-sys.matlab/browse_thread/thread/0527d566c3b72873
摘抄如下:
在matlab命令行输入:
cd(prefdir)
edit compopts.bat
或者在硬盘中查找"compopts.bat"也可,如果是 Windows 一般在个人用户的文件夹下面。
此时compopts.bat打开,在文件最后添加:
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
重新用 mcc 编译,运行将不会再出现 DOS 窗口。
这是假定编译器指定为 VC 的情况,如果是其他的编译器:
Add following line to your options file before you compile:
LCC:
set LINKFLAGS=%LINKFLAGS% -subsystem windows
Microsoft Visual C/C++:
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
Borland:
set LINKFLAGS=%LINKFLAGS% -aa
新版本的编译方式和 6.x 有所不同。根据我的理解,在 6.x 里面编译一个程序是先把 m 文件转换成 C/C++ 文件,然后再编译,好处是速度快,可以自行更改代码。但是转换过程存在技术难度,不能保证所有的函数都顺利转换。在 7.x 编译器仅仅是生成一些特定的接口函数,具体的函数还是原来的函数,不过是通过 MCR 来运行。好处是编译后的程序基本都能运行。
希望 MathWorks 将来能提供更完美的混合编程、编译发布的方法。
下面进入正题,若想在没有安装 MATLAB 的机器上运行由 MATLAB 程序编译成的可执行文件,必须先安装 MCR(MATLAB Component Runtime)。
安装程序可以在:$MATLAB\toolbox\compiler\deploy\win32\ 找到。也可以由下面的命令生成一个压缩包:
zipfile = buildmcr
zipfile = buildmcr(dirname)其中返回值zipfile是产生MCRInstaller.zip的完整路径名。
我试验的时候,生成的压缩包目录结构有些问题,不过不影响使用。
如果不采用自动安装,那么在把所有的文件解压缩后,需要在环境变量 PATH 里面加入相应的目录(一般为\runtime\win32)。
因此,若想把 MATLAB 程序作为独立应用程序发布,需要三个文件:
- 编译得到的可执行文件。
- 与可执行文件对应的 CTF 文件。
- MCR安装程序。
编译后的程序运行的时候会先解压缩 CTF 文件,所以如果对可执行文件所在的目录没有写权限会出错。
如果 MCR 安装不上或者运行出错的时候,可以参考:MCRinstaller.exe 安装突然中断问题的解决。
我在虚拟机上尝试安装 MATLAB Component Runtime (MCR) 不过没有成功 ,甚至连安装程序的目录还没有建立。但是在我一台笔记本上是没问题的。
安装失败没有明显的出错提示,只显示:
The wizard was interrupted before MATLAB component Runtime 7.5 could be completely installed.
You system has not been modified. To complete installation at another time, please run setup again.
搜索了一下发现,原来是缺少 Microsoft Visual C++ Redistributable Package。所需文件可以从下面找到,另外,不需要安装 .NET Framework,如果提示只要点继续就行。
Download the Microsoft Visual C++ Redistributable Package.
For 32-bit systems, download the SP1 version of vcredist_x86.exe (available here).
For 64-bit systems, download vcredist_x64.exe (available here).
Ver: MATLAB Compiler 4.x
Ref: MCR installation stops abruptly and displays error message