2017-09-04 176 views
1

我对matlab的mex函数非常有经验,但是我遇到的问题很难解决。无效的Mex函数

我收到类似这样的消息:

无效MEX文件 “mymex.mexw64”: 指定的程序无法找到。

通常,这个问题与丢失dll有关。 但是,我用依赖walker检查了几次,没有遗漏任何东西。

此外,我检查了“替代”软件,例如:ProcessMonitor,ProcessExplorer,CFF_Explorer ...等。我已经尝试了一切。

当我试图将旧的代码从Matlab2012迁移到Matlab2015时,问题就开始了。

在这个过程中:

  1. 我更新libmx,libmex到最新的版本(2015年)
  2. 改变QT版本到新版本(是的,我的MEX函数使用QT)
  3. 更改平台到v140(旧版本是v110,Visual Studio 2012)

我唯一的假设是某些使用了一些自定义* .lib文件的东西。这些lib文件在v110中编译,我使用的是v140。在我的发行版软件包中,我已经将这些dll包含在Visual C++可再发行组件包v110和v1 v1中。我不确定这是否可能,尽管源代码编译得很好。

我没有测试除去这些*的.libs,因为这将是相当痛苦的

我的问题是:

  1. 是我的假设是否有效?
  2. 有谁知道如何解决这个问题?
+0

像这样:https://stackoverflow.com/questions/33659878/visual-studio-2015-v120-vs-v140 – guilhermecgs

回答

0

我自己想出了答案。原来,simulink在内部使用qt。所以,我的自定义应用程序中的Dll与simulink QT dll相冲突。两者都有相同的名称,但simulink正在使用一个稍微不同的QT版本。

QT指出,使用相同的主要版本,你可以有向后兼容性...但事实并非如此,至少在matlab环境中不存在。