matlab2012b与VS2012混编总结(2)——将.m文件编译成dll和lib库文件过程中遇到的问题及解决办法

注意:最终的最终发现,matlab2012b虽然可以生成链接库等,vs2012也能调用,但是执行不了,找了好久也没有找到好的解决办法,最后改用matlab2013a,它可以直接识别vs2012的编译器,不需要添加别的文件什么的,其他的和以下所写的一样。或者用matlab2010b和vs2010也可以完美匹配哦!!!
 
在我的上一篇博文《 matlab2012b与VS2012混编总结(1)——将.m文件编译成dll和lib库文件》中所写的只是 在不出任何状况的情况下顺利进行的结果,然后作为新手+菜鸟的我总是出现各种各样的问题,我把我不管是否成功的经历都写于此,供朋友们借鉴:
 
第一次尝试:
 
第一次做的时候我并没有配置系统变量(虽然最后也不知道是不是因为这个系统变量的关系),且前期准备所添加的四个文件不是正确的,而是以下四个文件:
                    http://yunpan.cn/QiqCp8GSfyAsn   访问密码 811b

       上面的网址里面是msvc110compp.bat和msvc110compp.stp文件,放在D:\Program Files\MATLAB\R2012b\bin\win64\mbuildopts文件夹下,其中D:\Program Files\MATLAB是我matlab的安装路径

        http://yunpan.cn/QiqCNgpa8zdJG  访问密码 4504

       上面的网址里面是msvc110opts.bat和msvc110opts.stp文件,放在D:\Program Files\MATLAB\R2012b\bin\win64\mexopts文件夹下,其中D:\Program Files\MATLAB是我matlab的安装路径

这四个文件与可以用的四个文件相差不大,但是就因为这一点点区别结果却很不一样啊。运行出来提示缺少各种.h文件,比如windows.h等等,错误提示如下:

 

D:\PROGRA~1\MATLAB\R2012b\extern\include\mclmcrrt.h(59) : fatal error C1083: 无法打开包括文件:“windows.h”: No such file or directory 

 

  D:\PROGRA~1\MATLAB\R2012B\BIN\MEX.PL: Error: Compile of '123.cpp' failed. 

 

Error: An error occurred while shelling out to mbuild (error code = 9). 

Unable to build executable (specify the -v option for more information). 

Error using mcc

Error executing mcc, return status = 1 (0x1).
        于是乎,我就在C盘中找到windows.h文件,将其复制到matlab安装目录的include文件夹下(曾试过将包含windows.h文件的文件夹添加到matlab路径中,不管用,故出此下策),又提示缺少其他.h文件,于是把windows.h所在文件夹里的文件都复制到matlab安装目录的include文件夹下,终于不再提示缺少.h文件,却提示缺少新的东西,于是乎放弃了。
 
失败!!!!!
 
第二次尝试: 
 
         经过第一次尝试,我在想是不是我matlab安装的路径有问题呢?我的VS2012安装时用的是默认路径,可是matlab我却安装到D盘中。于是我又重装了一下matlab,结果一样,所以由此看出并不是matlab安装路径的问题,也就是说matlab安装时并不需要默认路径。
        所以只要你的VS也就是VC++安装路径是按照默认的安装就行,matlab不强求!
 
失败!!!!!

 

第三次尝试:

 

将前期准备中的四个文件替换为正确的文件,本以为这次总可以了吧?可是新的错误来了:

 

c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57) : warning C4005: “__useHeader”: 宏重定义
        C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\sal.h(2872) : 参见“__useHeader”的前一个定义
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77) : warning C4005: “__on_failure”: 宏重定义
        C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\sal.h(2882) : 参见“__on_failure”的前一个定义
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(60) : error C2059: 语法错误:“数字上的错误后缀”
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(60) : error C2059: 语法错误:“常量”
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(65) : error C2059: 语法错误:“数字上的错误后缀”
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(65) : error C2059: 语法错误:“常量”
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(68) : error C2059: 语法错误:“数字上的错误后缀”
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(68) : error C2059: 语法错误:“常量”
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(73) : error C2059: 语法错误:“数字上的错误后缀”
c:\users\csc\desktop\matlab-ex\matlab+vs\123.h(73) : error C2059: 语法错误:“常量”
123.cpp(75) : error C2059: 语法错误:“数字上的错误后缀”
123.cpp(75) : error C2059: 语法错误:“常量”
123.cpp(78) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
123.cpp(78) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
123.cpp(105) : error C2059: 语法错误:“数字上的错误后缀”
123.cpp(105) : error C2059: 语法错误:“常量”
123.cpp(106) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
123.cpp(106) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
123.cpp(107) : error C2059: 语法错误:“数字上的错误后缀”
123.cpp(111) : error C2059: 语法错误:“数字上的错误后缀”
123.cpp(111) : error C2059: 语法错误:“常量”
123.cpp(112) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
123.cpp(112) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
123.cpp(118) : error C2059: 语法错误:“数字上的错误后缀”
123.cpp(118) : error C2059: 语法错误:“常量”
123.cpp(119) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
123.cpp(119) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
 
  D:\PROGRA~1\MATLAB\R2012B\BIN\MEX.PL: Error: Compile of '123.cpp' failed.
 
Error: An error occurred while shelling out to mbuild (error code = 9).
Unable to build executable (specify the -v option for more information).
Error using mcc
Error executing mcc, return status = 1 (0x1).

 

其中123是我给保存文件命的名。虽然也是错误很多,但是至少比之前进步了,是语法错误,也不算缺少什么文件啊,什么的。

 

失败!!!但是有进步~~~~

 

第四次尝试:

 

这次尝试改的东西也不多,一开始也出现错误,后来莫名其妙就好了。

 

做了以下改变:第一,这次尝试中我设置了系统变量;

                      第二,添加的编译器的四个文件还是第三次尝试中的四个文件;

                     第三,卸载了Microsoft Visual C++ 2010 X64 Redistributable 和 Microsoft Visual C++ 2010 X86 Redistributable;

                    第四,安装了Microsoft .NET Framework 3.5 和 Microsoft Windows SDK for Windows 7.1 (不过这两个最后都没有安装成功的说,倒是把Microsoft Visual C++ 2010 Redistributable给重新装上去了)

做完以上工作之后输入命令:mcc -W cpplib:123 -T link:lib MyAdd.m,依然提示第三次尝试中的错误。

 

我以为再也不会好了,奇迹出现了,无意间在网页上看到一条指令: mcc -t -W cpplib:MyAdd -T link:lib -h libmmfile.mlib MyAdd.m,抱着死马当活马医的态度尝试了一下,成功了。

 

为了知道这条指令中哪个起到了关键作用,我就尝试着慢慢删除其中的某些部分做了以下的尝试:

mcc -t -W cpplib:MyAdd -T link:lib MyAdd.m

mcc -W cpplib:MyAdd -T link:lib MyAdd.m

看到最下面的那条指令了没?对,就是一开始一直出错的指令,居然奇迹般得毫无错误的可以运行了!!!

 

成功!!!!!!!!!!!虽然有一点点靠运气~~~~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matlab2012b windows版在关联vs2012编译器的时候,以及无法编译dll。 原因就是matlab默认的编译器的目录配置,include目录以及lib目录配置错误造成的。 如果你的vs目录不是默认的,或者windows是32位版本,或者vs版本不是2012,或者你的mt.exe目录不在Windows kits下,那么有可能需要修改附件里面的相关目录的设置(其实就是mbuild配置cl.exe和mt.exe的目录位置,以及mex配置的include和lib的所需目录),mbuild是编译exe的,mex是编译dll的。我的另一个资源仅处理mbuild配置,未处理mex的配置,所以不能成功编译mex。如果你已经下载过我的另一个资源,请替换mexopts目录下的msvc110opts.bat文件的30和31行代码(而不必下载这个资源): set INCLUDE=%VCINSTALLDIR%\INCLUDE;%VCINSTALLDIR%\ATLMFC\INCLUDE;%LINKERDIR%\include\um;%LINKERDIR%\include\shared;%LINKERDIR%\include\WinRT;%INCLUDE% set LIB=%VCINSTALLDIR%\LIB\amd64;%VCINSTALLDIR%\ATLMFC\LIB\amd64;%LINKERDIR%\lib\win8\um\x64;%MATLAB%\extern\lib\win64;%LIB% 附件里有一个word文件,是我修改的注释信息,如果需要手动修改,可以当做帮助来用. mbuild设置方法: 1 把附件相关的4个文件添加到matlab/bin/win64下面的2个相关目录 2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 mbuild应该成功了,此时可以编译为exe文件。 mex设置方法: 1 在matlab 里面运行 mex -setup, 然后选 y, 再选择2012的那个项目,再选y 2 mbuild应该成功了,此时可以编译为dll文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值