注意:最终的最终发现,matlab2012b虽然可以生成链接库等,vs2012也能调用,但是执行不了,找了好久也没有找到好的解决办法,最后改用matlab2013a,它可以直接识别vs2012的编译器,不需要添加别的文件什么的,其他的和以下所写的一样。或者用matlab2010b和vs2010也可以完美匹配哦!!!
在上一篇博文中,我尝试了很多方法和解决方案,最终成功的在matlab2012b下通过mcc指令编译产生dll和lib动静态链接库以及其他文件,如果借助于dll,lib和h文件即可成功实现matlab2012b与VS2012之间的混编(其实也是可以的,之后我会介绍),没有某些强迫症的话就没必要看这篇博文了。
我之前在有一篇文章里看到说matlab与VC++混编需要四个文件,.lib,.dll,.h,和 .ctf后缀的文件,于是啊,我开始纠结我在混编时在VS中生成代码时出现的各种问题是不是因为缺少了ctf文件(事实证明不是因为缺少此文件,如果大家尝试过各种方法之后仍然提示错误,可以尝试添加个ctf文件,有时候这也是说不准的,大概因为我还是菜鸟吧,不懂修改其他文件,只好什么都试一下),我上篇博文中的两个指令:mcc -t -W cpplib:MyAdd -T link:lib MyAdd.m和mcc -W cpplib:MyAdd -T link:lib MyAdd.m生成的文件中并没有ctf后缀的文件。
在看了相关文件之后说在指令后面添加-C选项即可产生ctf后缀文件,原因是:在matlab2007之后的版本中已经把ctf文件压缩到EXE格式的文件中,所以在生成的文件中不会单独分离出ctf文件,(其实在生成的时候认真观察还是有ctf文件出现的,但是出现了之后大概1秒的时间吧,就消失了);要想生成ctf文件就需要在上面的两条指令的最后面添上-C:
mcc -t -W cpplib:MyAdd -T link:lib MyAdd.m -C
和mcc -W cpplib:MyAdd -T link:lib MyAdd.m -C
用于将ctf文件分离出来。但是很不幸,我在运行这两条指令时出现了以下错误:
Depfun error: 'Unable to locate –C as a function on the MATLAB path'
2014年5月21日更新:昨天由于matlab出问题,重装了一下,发现上面的两条指令完全可以运行,一点问题也没有了!
在网上搜索了一番,有以下几种解决办法:
http://www.cnblogs.com/yingying0907/archive/2012/11/11/2710826.html中说:当前编译路径没有修改,错误已经提示了,将当前matlab路径改到你这个m文件所在的路径下,(点击运行按钮会出现 change directory,选择即可)再进行编译!可是matlab的当前路径就是在改m文件所在的路径下。
还有说什么设置好编译器,可是这些我都已经弄好了,也试了其他网页上的各种方法仍然没能解决这个问题,于是乎放弃了。
所以我想着换一种编译方法,在需找上面解决办法的同时,我看到有一篇文章写的是利用MATLAB
下面我介绍用MATLAB compiler编译链接库的过程:
在MATLAB的主界面菜单栏中选择MATLAB compiler,如下图所示:
选择完之后出现以下对话框:
点击设置按钮,其他的选项相信大家都能看明白,唯独要设置ctf的输出问题,这是输出ctf文件的关键步骤,如下图所示:
成功!!!