A. 如何设置matlab 编译器 mex
mex -setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n? y
Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\Programs\MATLAB\R2010a\sys\lcc
[2] Microsoft Visual C++ 2005 SP1 in D:\Program Files\Microsoft Visual Studio 8
[3] Microsoft Visual C++ 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler: 2
Please verify your choices:
Compiler: Microsoft Visual C++ 2005 SP1
Location: D:\Program Files\Microsoft Visual Studio 8
Are these correct [y]/n? y
Trying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2010a\mexopts.bat
From template: D:\Programs\MATLAB\R2010a\bin\win32\mexopts\msvc80opts.bat
Done . . .
**************************************************************************
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements. In the near future
you will be required to update your code to utilize the new
API. You can find more information about this at:
http://www.mathworks.com/support/solutions/en/data/1-5C27B9/?solution=1-5C27B9
Building with the -largeArrayDims option enables the new API.
**************************************************************************
B. MATLAB mex 找不到编译器怎么办
①选y后,MATLAB会列出当前机器上已经安装的、且与当前MATLAB版本兼容的所有C编译器,一般而言,MATLAB都会自带一个LCC编译器,然而LCC目前仅支持32位的MATLAB,所以你的机器上没有。
②选n后,MATLAB会列出所有与当前MATLAB版本兼容的C编译器类型(不管你是否已经安装,用于帮助用户选择合适的C编译器),你机器上已经安装的2个编译器,VC6.0:MATLAB从R2010b之后不再支持,所以选项里看不到;而SDK7.1选n时可以看到([11]),但选y时没有跳出,是因为MATLAB没有正确定位SDK。
③解决方法:
方法一:如果以缺省选项安装了SDK7.1(不改变默认安装路径),可以尝试输入n后,选择 [14] (注意:是14,不是11!),强制定位该编译器(网上有人用这种方法成功了:http://mlinking.blog.163.com/blog/static/185801922201331464626365/)
方法二:重新安装MATLAB,安装时选择32位进行安装,则自带LCC编译器。
方法三:选择适配的VS版本,下载安装后,重新配置MEX命令。
C. matlab 把c文件 编译成mex64 文件
下面是编译步骤:
1. 设置编译器
(1)在MATLAB命令窗口中运行mex –setup,出现下列提示:
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n?
(2)选择y,MATLAB将自动搜索计算机上已安装的外部编译器的类型、版本及所在路径,并列出来让用户选择:
Select a compiler:
输入有lcc那个选项,我输入的是1
(3)让你确认选择的编译器是否正确,正确输入y,否则输入n。
2. 输入mex straight_line_integral_inner.c 没有报错则编译成功,你可以在你的项目文件夹下发现多了一个文件straight_line_integral_inner.mexw32。
这样你就可以在MATLAB中调用C代码了。
注:如果是WINDOWS系统,则生成mex32;如果是Win7则生成mex64.
D. matlab 中mex -setup 编译器怎么弄
这个需要你的电脑上安装有C++6.0才能出来,mex -setup列出的编译器都是你电脑上的,你图上的[1] Lcc-win32是matlab自带的编译器。
由于你电脑上没安装其他的编译器,当然就检测不到C++6.0
E. Windows下,MATLAB的FORTRAN编译器MEX怎么安装
需要预先安装fortran编译器,最低版本是compaq vf5.0
F. matlab mex 编译器怎么编译文件
通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率。
MEX文件的后缀名为 .mexw32
MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB应用程序接口组件和相关工具,二是要有C语言或Fortran语言的编译器。
需要对MATLAB系统进行设置,使MATLAB系统知道使用系统的哪一个C语言编译器,以及其参数和路径。
MEX文件系统设置:
>> mex –setup按照提示进行,最后出现Done…系统配置完毕。
C语言MEX文件的建立
C语言MEX文件的建立
1. MEX文件的结构
a) 计算子程序
b) 入口子程序,void mexFunction(int nlhs, mxArray *plhs[],int nrhs,const mxArray *prhs[]){ /*用户特定的代码….*/ }
2. 创建timestwoalt.c
#include "mex.h"
void timestwo_alt(double *y, double x)
{
*y = 2.0*x;
}
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
{
double *y;
doublex;
/* 检查参数 */
if (nrhs != 1) {
mexErrMsgTxt("One input argument required.");
} else if (nlhs > 1) {
mexErrMsgTxt("Too many output arguments.");
} else if (!mxIsNumeric(prhs[0])) {
mexErrMsgTxt("Argument must be numeric.");
} else if (mxGetNumberOfElements(prhs[0]) != 1 || mxIsComplex(prhs[0])) {
mexErrMsgTxt("Argument must be non-complex scalar.");
}
/* 为输出参数创建变量 */
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
/*
为参数 x、y赋值,x为值,而y为指针
(由于MATLAB没有值传递,所以用指针才能得到修改后的y值,
不然修改的是y的一个副本,为临时变量,在函数返回时,y值没有变化,
不能得到希望的结果)
*/
x = mxGetScalar(prhs[0]);
y = mxGetPr(plhs[0]);
/* 调用timestwo_alt 子函数 */
timestwo_alt(y,x);
}
3. 编译链接C语言的MEX文件源程序,在MATLAB的控制窗口中输入:mex timestwoalt.c生成一个名为timestwoalt.mexw32的MEX文件
4. 运行:在MATLAB的控制窗口中输入
x=2;
y=timestwoalt(x)
输出:y=4
MEX文件实现了一种C语言与MATLAB的接口,其实际的计算功能仍在C语言形式的计算子程序中完成,而入口子程序的功能是检查参数以匹配C语言的参数规范(how to?)。
当有C语言编写的大型程序时,不必用MATLAB语言重新编写,只要将此C语言程序作为一个计算子程序,然后编写一个入口子程序,完成参数的匹配,然后编译成MEX文件即可。
MEX文件的另外一个功能是可以将MATLAB编程中的瓶颈问题,如多重循环等,将此类费时的指令用C语言实现,然后作必要的入口子程序,编译成MEX文件,可以有效地提高MATLAB的效率。
S-函数创建器限制了C语言S-函数的功能:只能有一个输入信号和一个输出信号,而且只能处理double类型的数据!所以,可用性不大。
G. 错误使用 mex
如果mexw64文件在matlab搜索路径上,里面的函数就能用,但是要把mex的C语言源文件编译成mex文件当然需要编译器,在windows上,2015b及以后版本可以添加免费的minGW-w64作为编译器,体积也很小,从add-ons 里面搜索添加即可。
H. MATLAB 错误使用 mex
要解决相关的mex命令找不到编译器,首先就需要了解相关命令调用的配置文件的路径位于:<MatlabRoot>/bin/win64/mexopts,里面有很多和和编译器以及SDK相关的环境配置文件,如图所示。
1、matlab版本问题
标明了不同类型版本的编译器配置文件,如果编译器版本的配置信息不在这个文件夹里面自然会提示找不到到文件夹。这类问题网上有很多解决方法,提供了很多相应版本的配置文件,只要将其拷到mexopts文件夹下,就解决了。
2、配置文件里面的路径和电脑的实际路径不一致
解决方法:要仔细核对 msvc2013.xml和msvcpp2013.xml这两个配置文件的信息。
(8)mex编译器版本扩展阅读:
通过使用MEX文件,MEX文件使得调用C函数和调用Matlab的内置函数一样方便。MEX文件是由原C代码加上MEX文件专用的接口函数后编译而成的。
MEX文件实现了一种接口,它把在Matlab中调用函数时输入的自变量通过特定的接口调入了C函数,得出的结果再通过该接口调回Matlab。该特定接口的操作,包含在mexFunction这个函数中,由使用者具体设定。
I. 请问有大佬知道为什么MATLAB里面mex可以找到编译器但是mbuild不行
MATLAB会列出当前机器上已经安装的、且与当前MATLAB版本兼容的所有C编译器,一般而言,MATLAB都会自带一个LCC编译器,然而LCC目前仅支持32位的MATLAB,所以你的机器上没有。
J. 如何MATLAB2013a在win8-64位系统上能装mex编译器
#隐藏apache版本信息
sed -i 's/#define AP_SERVER_BASEPRODUCT "Apache"/#define AP_SERVER_BASEPRODUCT "Microsoft-IIS 5.0"/' include/ap_release.h
sed -i 's/#define PLATFORM "Unix"/#define PLATFORM "win32"/' os/unix/os.h
./configure --prefix=/usr/local/apache \
--enable-deflate \
--enable-headers \
--enable-mime-magic \
--enable-proxy \
--enable-ssl \
--enable-so \
--enable-rewrite \
--enable-suexec \
--with-suexec-bin=/usr/sbin/suexec \
--with-suexec-caller=www \
--with-pcre=/usr/local/pcre/bin/pcre-config \
--with-mpm=prefork \
--with-ssl=/usr
make;make install
#make的时候报错,“/usr/lib/libexpat.so: could not read symbols: File in wrong format”