当前位置: 移动技术网 > IT编程>开发语言>C/C++ > VS/Qt C++和Matlab混合编程

VS/Qt C++和Matlab混合编程

2018年09月13日  | 移动技术网IT编程  | 我要评论

海娜粉染发,工作总结ppt模板,灰谷幽灵狼

      最近两天在搞c++和matlab混合编程,这个中间过程真是让人心酸啊,最后还是搞定成功!现在把这个过程记录一下。

      首先自己的电脑本来就安装着matlab2013b,按着网上的说法首先需要输入!mcc,测试当前matlab上的编译器。可是发现没有,上网查资料说是matlab2013b破解不完全。没办法从网上下载了matlab2015a,然后安装破解。测试发现编译器ok

      然后写了一个add.m文件,生成动态库dll。然后在vs2013中调用,出现无法解析的外部符号。然后用工具查看了一下dll中导出的符号。只有自己定义的那个函数符号符合正常的规则,其他的函数导出符号看起来很奇怪,和函数本身名一样。最后继续在网上查找

     各种方法,后来说是软件位数不同导致的。vs2013默认的版本是win32 32位的。而matlab导出的dll,是64位的,所以修改工程为64位工程。另外就是配置各种matla需要的头文件路径和lib路径。然后顺利编译通过。运行程序时让人崩溃了 出现应用程序无法启动              0x000007b,然后查找网上各种说法,程序调用的dll不对,要修复系统dll,然后自己还下载了修改工具,把系统修复了一遍,但是还是没有解决问题。搞了一天半,人都快崩溃了 问题还是没有解决。无奈猜想是不是系统有什么问题,然后把运行程序复制到win10系统下运行经过一番copy 需要的dll之后  点击exe  还是报同样的错误。无奈啊。。。。

     算了  不搞了  又去求助python,查阅了一些python和matlab的对比介绍。还是觉得matlab更符合自己的需要。没办法 还得搞这个问题。最后算了  先搞其他事,先让自己缓一缓。

    过了一天,自己心里还是老惦记着这个事。心想是不是还是matlab的问题,于是乎又去网上看别人成功的例子用的是哪个版本。然后看到有人用matlab2016a和vs2013的案例。然后又去网上找matlab2016a的安装包。然后同样的方法安装,破解,导出dll,vs调用 编译。。最后运行。 心里那个苦啊   还是报那个错误。上天呀  问题出在哪呢!!!!!!!!

    最后准备放弃的时候,突然脑子闪过之前看过说matlab和c++混合编程头文件重复包含导致重定义。的确工程编译的有一些宏重复定义的警告。后来把包含的三个头文件去掉,发现照样可以编译过,包含多余的。然后去点击exe,竟然运行成功了!成功了!竟然一个小小的告警隐藏着这么大的隐患。

    具体根本原因是怎么导致崩溃的,其实自己还是没有搞清楚。

    因为自己用qt比较熟练,所以开始考虑在qt中调用matlab生成的dll,其实原理都一样很简单。

    在pro中配置好lib库以及需要的头文件,编译通过ok,运行的时候出现初始化失败!郁闷。想了好久也想不出原因。后来过了一天。翻阅网上的帖子突然考到vs编译器版本问题。突然意识到有可能是编译器版本的问题。

    首先说一下自己电脑上的各种版本:自己电脑上首先matlab版本有2013b 2015b,2016a这几个版本   vs2010 vs2013  qt5.5.1-vs2013(32位) qt5.5.1-vs2010(32位和64位)

    看着都乱~  

    生成dll我是用matlab2016a 选择的编译器是vs2013 c++,编译出来的dll 在vs2013 64位环境下运行ok的,但是在qt5.5.1-2010(64)运行就出现初始化失败。仔细推敲发现。我的64位qt是vs2010版本的,而生成matlab的dll是用vs2013 c++编译器生成的。版本不对应。

   于是乎。。。将matlab的编译器选择成vs2010 c++版本   生成dll 然后在qt运行,又出问题了出现。

   报错:

    an error has occurred while trying to initialize the matlab runtime.

   the error is: fatal error loading library d:\software\matlab2016a\bin\win64\libmat.dll error: 找不到指定的程序。

   这是什么鬼~  libmat.dll调用乱了吗(电脑中,matlab版本很多),那就找到对应的libmat.dll  copy到运行目录下,继续运行  还是同样的错误。。郁闷啊   

   双击exe程序,出现无法定位程序输入点于icuuc54.dll,那就将这个dll拷贝到运行目录下  运行!哇塞   成功了!竟然运行出来。

   不过好像有个警告

   setthrowsegvlongjmpsehfilter(): filter function installed

   setthrowsegvlongjmpsehfilter(): filter function installed

   出现了上面两行东东~   

   什么原因呢。。。没有搞懂。

   至此   也就是matab和vs  qt混合编程算是成功了   谁知后面正式用的时候还会出现什么问题。

   后续如有新的发现。会继续跟踪的!

     

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网