matlab2014b mex 后出现找不到SDK或sdk 编译器器怎么办

Matlab中mex关联VS2013编译器 - 下载频道 - CSDN.NET
&&&&Matlab中mex关联VS2013编译器
&Matlab中mex关联VS2013编译器
用于解决在Matlab中用mex编译C(C++)文件时,找不到VS编译器的问题。
资源中文件适用于Matlab(2012a/b,2013a/b)中关联VS2013的编译器,使用后mex -setup 中会增加 Microsoft Visual C++ 2013 一项。
使用方法:解压到Matlab安装的以下路径中(我的路径是C:\Program Files\MATLAB\R2012a\bin\win32\mexopts),然后回到Matlab中执行mex -setup 指令即可。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
评价资源返积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
积分不够下载该资源
如何快速获得积分?
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
Matlab中mex关联VS2013编译器
所需积分:2
剩余积分:
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
VIP服务公告:用心创造滤镜
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
包括参考这篇文章手动指定安装目录,但是无效!随后我又重新测试了&速成班&VS2005&VS2010等不同版本,甚至重装MATLAB,都均告失败。最后本人决定今天决定一行行代码调试,将其问题找出!艰巨的工程由此开始:从MATLAB开始mex&-setup&的调用跟踪为mex.m&-&&mexhelper&-&&line&52&:errCode&=&dos([&cmd&'&-'&computer('arch')&]);cmd&内容为&cmd&="D:\Program&Files\MATLAB\R2007b\sys\perl\win32\bin\perl.exe"&"D:\Program&Files\MATLAB\R2007b\bin\mex.pl"&@"D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\tp255a6fcd_58_160d6d36fdaf.rsp"到此为止&本人傻眼了,居然是perl.exe,完全没弄过,还好是脚本语言,是明文...于是上网找&perl的资料&,尤其是调试资料!老实说perl真是晦涩,都看得我眼睛发疼,不由想脚本语言也不能为了简便,搞出那么多符号,整个代码像鬼画符一样!老实开始啃吧...perl的调试倒是方便,只要加个&-d&就进入调试模式,毕竟是解释语言啊~~~~全命令行模式,老子终于也看着像高手一会了(曾经巨佩服不用IDE写程序的人....)。。。省略了1W字,耗时5小时,其中的艰难就不说了...我终于找到问题!大多数对MEX略有了解的人,都会猜MEX的编译问题多半出在&%MATLAB%\bin\win64\mexopts目录里的配置文件上可我嘛.................也是这么想的...打开msvc80opts.stp(VS2005的配置文件),一看居然是perl语言的脚本前面有行显眼的&my&$default_location&=&"C:\\Program&Files(x86)\\Microsoft&Visual&Studio&8";得...很多人都和我一样VS2005没有装C盘,直接改了以为OK了其实大错特错,MATLAB&这个变量只是默认路径,对于非默认路径安装的VS,软件会通过注册表查找路径具体如下:#&Search&the&registry.&&&&&&&&&$msvc8_root&=&&$registry_lookup_fcn("SOFTWARE\\Microsoft\\VisualStudio\\8.0\\"&.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"Setup\\VC",&"ProductDir");可见问题不在这里,没法了只能一步一步调试了,尤其恶心的是stp文件不是pl也不是pm,为了找到其调用方式,进入调试着实费了我一番功夫。终于让调试&进入&&msvc80opts.stp(类似Dll动态加载,但是不是函数形式&&看:my&@locations&=&&$locate_&就这么一行搞定了,真.....)OK,&接下来简单了,跟踪呗,发现问题出在这里,并非我原来所想的文件目录&路径之类的问题而是&版本比对出错的问题!!if&(&correct_version("$msvc8_root\\VC\\bin\\amd64\\cl.exe","14.0")){&&&&&&&&&&&&&&&&&push(@msvc8_roots,&$msvc8_root);&&&&&&&&&&&&&}&找到&correct_version函数的定义一看sub&correct_version&{#===================================================================#&correct_version:&A&local&function&to&returns&true&if&the&version#&of&the&compiler&matches&the&expected&version&string.#===================================================================&&&&my&$executablePath&=&$_[0];&&&&my&$versionNumber&=&$_[1];&&&&my&$version=`\"$executablePath\"&2&&1`;&&&&return&$version&=~&/Version&$versionNumber/;}&#&correct_version问题在这行红色的代码上,一个正则表达式的匹配,上面这行实际上就是无参数执行cl.exe&将返回的&信息赋给$version返回的信息如下:用于X64的&microsoft&&&R&&c/c++&优化编译器&14.00.50727.42&版版权所有...略&&看来这就是获得cl版本信息的方法,再看看代码里/Version&$versionNumber/&不用想了,这是针对鸟语版VS的....也就是说要是你使用的VS是英文版的,理论上市没问题的,同理要是是中文VS,哪怕2010照样嗝屁...到此问题发现了,解决就轻而易举了,把“Version&”改成&“优化编译器”就可以了。看到成功编译生成libsvm的.mexw64文件,这个心情爽啊!!&最后给懒人们附上修改好的&mexsetup.pm&文件,覆盖几可(注意only&for&中文VS)下载地址:&
阅读(4561)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'彻底解决MATLAB混合编程在64位windows系统中找不到编译器的错误(mex,mbuild,MCR...)',
blogAbstract:'各位常用MATLAB的朋友都知道64位系统下matalb内存管理性能要优秀的多,基本不会出现由于内存碎片导致的&out&of&memory错误,',
blogTag:'编译器,64,matlab,混合编程',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:1,
permalink:'blog/static/',
commentCount:2,
mainCommentCount:2,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Matlab中C语言和matlab混合编写后,编译成Mex文件时出现如下问题,是什么情况?
刚学matlab中混合编程的东西,随手抄了个小例子,竟然还编译不成功,一直提示:mex add.clcc preprocessor warning: add.c:16 No newline at end of file Error add.c: 8
redeclaration of `mexFunction' previously declared at E:\Program Files\MATLAB\R2010b\extern\include\mex.h 146 1 errors, 1 warnings
E:\PROGRA~1\MATLAB\R2010B\BIN\MEX.PL: Error: Compile of 'add.c' failed.实在搞不清是哪里错了,求知友指点~另外,add.c内容如下:#include "mex.h" double add(double x, double y){
return x+y;}void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]){
double *a, b,c;
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);// 为输出分配内存
a=mxGetPr(plhs[0]);
b=*mxGetPr(prhs[0]);
c=*mxGetPr(prhs[1]);
*a=add(b,c);}
按投票排序
函数重载的问题,你看给的错误提示里面说的mexFunction函数出现了8个重定义错误,去修改你的函数特的去找了源文件#ifdef __cplusplusextern "C" {#endif/* * mexFunction is the user defined C routine which is called upon invocation * of a mex function. */void mexFunction(
/* number of expected outputs */
/* array of pointers to output arguments */
/* number of inputs */
const mxArray *prhs[]
/* array of pointers to input arguments */);#ifdef __cplusplus}#endif和上面说的答案一样,如果不是C++的编译器的话,会默认添加一个函数定义。由于C不允许函数重载,因此最后一个参数必须加上const,如果是VS2010,那是因为人家是C++的编译环境,因此允许出现重载。
用matlab自带的lcc编译器是纯c编译器,不支持函数重载,头文件里面函数原型是mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]),你加个const应该可以编译过去。你先用mex -setup把编译器之类的设置好,最好装个vs编译器,我这里vs2010就没问题,其实这类问题 google一下,上stackoverflow上随便一找就是一堆
说句题外话配置Matlab编程环境总的来说我感觉很麻烦,尤其是Matlab引擎无法使用save等函数,各种语言对Matlab支持的模式也不同最后我终于大彻大悟了。。。假设我们的电脑里装了Matlab我们需要做的就是命令行输入或者其他语言调用matlab -r -mymfile,记得在myfile里加一句quit这是完整版的Matlab,比Matlab引擎更值得信赖的Matlab然后通过mat/txt/csv值传输&要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。&&&&&& 虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。&1. MATLAB 环境配置:&在 Matlab 的Command Window 下输入命令 ,配置生成器& && mbuild -setup&Welcome to mbuild -setup.& This utility will help you set up& a default compiler.& For a list of supported compilers, see&
&Please choose your compiler for building standalone MATLAB applications: &Would you like mbuild to locate installed compilers [y]/n? y (注:若是第一次mbuild -setup,选n,再在给出的的选项中选择2010 compiler,要注意安装路径是否相符)&Select a compiler: [1] Microsoft Software Development Kit (SDK) 7.1 [2] Microsoft Visual C++ 6.0 [3] Microsoft Visual C++ 2008 SP1 [4] Microsoft Visual C++ 2010 [5] Microsoft Visual C++ 2012 &[0] None &Compiler: 4&&&Your machine has a Microsoft Visual C++ 2010 compiler located at E:\Program Files\VS2010. Do you want to use this compiler [y]/n? y&Please verify your choices: &Compiler: Microsoft Visual C++ 2010 &Location: E:\Program Files\VS2010 &Are these correct [y]/n?& y&**************************************************************************** & Warning: Applications/components generated using Microsoft Visual C++&&&& &&&&&&&&&&& 2010 require that the Microsoft Visual Studio 2010 run-time&&&&& &&&&&&&&&&& libraries be available on the computer used for deployment.&&&&& &&&&&&&&&&& To redistribute your applications/components, be sure that the&& &&&&&&&&&&& deployment machine has these run-time libraries.&&&&&&&&&&&&&&&& &**************************************************************************** &&Trying to update options file: C:\Users\Yanlu\AppData\Roaming\MathWorks\MATLAB\R2013a\compopts.bat From template:&&&&&&&&&&&&& E:\PROGRA~1\MATLAB~1\bin\win32\mbuildopts\msvc100compp.bat &Done . . .&&然后输入命令 && mex – setup &以类似的方法配置编译器。Matlab 的配置完成.Welcome to mex -setup.& This utility will help you set up& a default compiler.& For a list of supported compilers, see&
&Please choose your compiler for building 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:\PROGRA~1\MATLAB\R2011b\sys\lcc [2] Microsoft Visual C++ 2010 in D:\Program Files\Microsoft Visual Studio 10.0 [3] Microsoft Visual C++ 2008 SP1 in E:\Program Files\Microsoft Visual Studio 9.0 &[0] None &Compiler: 2&&Please verify your choices: &Compiler: Microsoft Visual C++ 2010 &Location: E:\Program Files\VS2010 &Are these correct [y]/n? y&*************************************************************************** & Warning: MEX-files generated using Microsoft Visual C++ 2010 require &&&&&&&&&& that Microsoft Visual Studio 2010 run-time libraries be &&&&&&&&&&& available on the computer they are run on. &&&&&&&&&& If you plan to redistribute your MEX-files to other MATLAB &&&&&&&&&& users, be sure that they have the run-time libraries. *************************************************************************** &&Trying to update options file: C:\Users\Yanlu\AppData\Roaming\MathWorks\MATLAB\R2013a\mexopts.bat From template:&&&&&&&&&&&&& E:\PROGRA~1\MATLAB~1\bin\win32\mexopts\msvc100opts.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: &&&&&&&&&& /help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html &&&&&&&&&&& Building with the -largeArrayDims option enables the new API. **************************************************************************&&&2.转化BoostImage.m文件 &mcc -W cpplib:BoostImage -T link:lib BoostImage -d F:\zhangying\xieyulin\MatlabToC\ 注:在此的m文件function最好对应end,否则容易出现 Error using mcc的错误。(但我碰到有个m文件仍不能转化成功,不知什么原因) 是提供的编译命令,对于这一点,的帮助说明如下:是控制编译之后的封装格式,,是指编译成的,冒号后面是指编译的库的名字, 表示目标,表示要连接到一个库文件的目标,目标的名字是后面的BoostImage,即你写的函数的名字。
.dll是编译好的动态库,这个函数封装在里面,是对应的头文件,在里面调用这个函数的时候,需要这个头文件在这个头文件的最后,你可以看到下面的内容: 的函数的声明。,,就是对应了函数的几个变量。,,三个变量的类型是,这是提供的一个特殊的变量类型(在的版本,编译之后,变量类型是)。是一个类,具体可以查帮助。
2.系统环境设置& &
&上述环境只需要配置一次。另参考:http://blog.csdn.net/stardust94605/article/details/8972064
//&MatlabTest.cpp&:&Defines&the&entry&point&for&the&console&application.//#include&"stdafx.h"#include&&stdlib.h&&&&#include&&stdio.h&&&&#include&&string.h&&&&#include&"engine.h"&&&#include&"matrix.h"&&&#pragma&comment(lib,"libeng.lib")&&&&#pragma&comment(lib,"libmx.lib")&&&int&main()&&{&&&&&&Engine&*&&&&&&int&i&,&j&;&&&&&&//show&how&to&open&MATLAB&engine&&&&&&&//for&remote&ones:&&&&&&&//engOpen(&ADDRESS&OF&REMOTE&SYSTEM&)&;&&&&&&&if&(!(ep&=&engOpen("\0"))){&&&&&&&&&&fprintf(stderr,&"\nCan't&start&MATLAB&engine\n");&&&&&&&&&&return&EXIT_FAILURE;&&&&&&}&&&&&&//show&how&to&create&matrix&&&&&&&mxArray&*Y&=&mxCreateDoubleMatrix(1&,&3&,&mxREAL)&;&&&&&&&&&&&&//show&how&to&put&data&in&matrix&&&&&&&double&tmp[3]&=&{1.0&,&2.0&,&3.0}&;&&&&&&memcpy(mxGetPr(Y)&,&tmp&,&sizeof(tmp))&;&&&&&&//show&how&to&put&variables&in&the&Engine&&&&&&&engPutVariable(ep&,&"Y"&,&Y)&;&&&&&&//show&how&to&execute&commands&in&MATLAB&&&&&&&engEvalString(ep,&"X&=&ones(5,1)&*&Y");&&&&&&&&&&&&//show&how&to&get&variables&from&the&Engine&&&&&&&mxArray&*X&=&engGetVariable(ep&,&"X")&;&&&&&&&&&&&&//show&how&to&manipulate&dimensions&&&&&&&int&dims[10]&;&&&&&&int&ndims&;&&&&&&ndims&=&mxGetNumberOfDimensions(X)&;&&&&&&printf("total&number&of&dimensions&is&%d\n"&,&ndims)&;&&&&&&memcpy(dims&,&mxGetDimensions(X)&,&ndims&*&sizeof(int))&;&&&&&&for&(&i&=&0&;&i&&&ndims&;&i&++&){&&&&&&&&&&printf("dimension&%d&:&%d\n"&,&i&,&dims[i])&;&&&&&&}&&&&&&printf("\n")&;&&&&&&//show&how&the&data&is&stored&in&the&memory&&&&&&&double&*p&=&(double*)mxGetData(X)&;&&&&&&&&&&for&(&i&=&0&;&i&&&dims[0]&;&i&++&){&&&&&&&&&&for&(&j&=&0&;&j&&&dims[1]&;&j&++&){&&&&&&&&&&&&&&printf("%8.2f"&,&p[j&*&dims[0]&+&i])&;&&&&&&&&&&}&&&&&&&&&&printf("\n")&;&&&&&&}&&&&&&//---important,&to&release&resources&&&&&&&mxDestroyArray(X)&;&&&&&&mxDestroyArray(Y)&;&&&&&&//show&how&to&hide&and&unhide&MATLAB&command&window&&&&&&&printf("type&RETURN&to&hide&the&MATLAB&command&window...\n")&;&&&&&&getchar()&;&&&&&&engSetVisible(ep&,&false)&;&&&&&&printf("type&RETURN&to&unhide&the&MATLAB&command&window...\n")&;&&&&&&getchar()&;&&&&&&engSetVisible(ep&,&true)&;&&&&&&printf("type&RETURN&to&END&this&program...\n")&;&&&&&&getchar()&;&&&&&&&&&&//remembering&to&close&it&is&important&.&&&&&&&//but&if&you&are&debugging&your&programs&,&&&&&&&&//annotate&the&following&line&will&save&you&a&lot&of&time&,&&&&&&&//for&you&needn't&to&restart&the&Engine&.&&&&&&&engClose(ep)&;&&&&&&&&&&&&//when&your&work&is&accomplished&,&type&"exit"&in&MATLAB&command&window&&&&&&&return&EXIT_SUCCESS;&&}&&&&运行结果:&若出现如下问题: &error C2371: 'char16_t' : different basic types&&& 在混合编程中,也许会出现如下错误: &————————————————————————————————————————————————— C:Microsoft Visual Studio 10.0VCINCLUDEyvals.h(576) : error C2371: 'char16_t' : different basic typesC:Matlabr2010aexternincludematrix.h(330) : see declaration of 'char16_t' &————————————————————————————————————————————————— 原因是VS2010中的yvals.h添加了char16_t的定义,而Matlab的matrix.h也包含对char16_t的定义,所以同时包含这两个头文件的话,会导致重复定义char16_t的错误。 解决方案: 参考:/bits/2011/09/char16_t-conflict-while-mexing-with-vs2010/完全没有必要修改这两个头文件(以防修改之后,会在将来导致一些问题),只需要在包含matrix.h之前包含yvals.h即可。例如: #include &yvals.h&#if (_MSC_VER &= 1600)#define __STDC_UTF_16__#endif#include "mex.h" 注:mex.h 包含matrix.h。这就要求我们必须知道所包含的头文件是否包含matrix.h。
阅读(...) 评论()

我要回帖

更多关于 matlab找不到编译器 的文章

 

随机推荐