2010-04-08 191 views
0

我在我的机器上编译了mex64 dll。我用VS2008 Pro的Matlab 2009b来编译dll。该DLL工作正常,我的Matlab安装。跨计算机共享mex64文件

我希望有一个同事使用DLL,所以我把它交给他,他会试图使用DLL时,出现以下错误信息:

???无效的MEX文件'filename.mexw64':无法找到指定的模块。

我目前的假设是,这是因为他使用旧的Matlab版本或缺少我有的DLL。我运行了依赖关系检查器,并要求他检查他是否拥有所有列出的dll。

我还在等他确认他的Matlab版本。

还有什么其他原因可以导致这种情况,并且Matlab版本能起作用吗? (我的意思是R2009a时,我有R2009b中,而不是一个巨大的版本差异)


其他人有Matlab的R2009a。如果我在我的电脑上编译并交付给他,那么mex应该不行吗?

这是否只留下一个缺少的依赖dll?

回答

0

该Dll是MySql访问的包装。我们最终使用了Matlab的ODBC和MySql连接器。

0

一般来说,MEX文件应该可以跨越不同版本的Matlab;特别是它们应该是向前兼容的。你是对的;听起来像一个DLL问题。

如果使用Visual Studio构建它,它可能会链接到Visual C++运行时。这是默认情况下未安装在Windows上的一组库。它的“可再分发”可以下载here;安装你的同事可以解决问题。如果这不起作用,您可以使用Dependency Walker来检查其他不满意的DLL依赖关系。

通常情况下,配置Matlab的“mex -setup”以使用随Matlab分发的Lcc编译器可能是一种解决方法,但64位Windows AFAIK不支持。

另外,你确定他有64位版本的Windows?

+0

是的,我相信他有64位版本。我们现在正在使用依赖关系walker来查看Dll。谢谢! – Shaihi 2010-04-08 20:34:32

0

该问题的另一个可能的来源可能是您在调试模式下编译。 Visual C++可再发行组件仅支持发行模式。

+0

编译时我没有使用调试标志,所以我非常肯定它处于发布模式。 – Shaihi 2010-04-09 13:18:05

1

这个问题很奇怪,但我可以证实它存在。

使用预构建的matlab库正确安装并在路径中,我有时会得到相同的错误。如果我在命令行中键入函数名称,该函数将可见并将自动完成。但是,只有使用.mexw64库文件“cd”进入目录后,该函数才会初始化。

>> AndorInitialize('') 
Invalid MEX-file 'C:\Program 
Files\MATLAB\R2011b\toolbox\andor\AndorInitialize.mexw64': The 
specified module could not be found. 

>> path 

     MATLABPATH 

    C:\Program Files\MATLAB\R2011b\toolbox\andor 
    C:\Program Files\MATLAB\R2011b\toolbox\andor\camera files 
    C:\Program Files\MATLAB\R2011b\toolbox\andor\m files 
    ... etc 

事实证明,这是由于缺少依赖关系,应该不会丢失。要解决该问题,请使用dependency walker(免费,轻量级)标识缺少的内容。数学工作室解释了这一点。

http://www.mathworks.com/support/solutions/en/data/1-2RQL4L/

在我的情况下,两个DLL的都没有显示正确,即使他们是我的系统上和路径。我将DLL复制到windows/system32文件夹中,现在库函数正常工作。特别奇怪的是前几天在移动DLL之前,我的计算机上使用了相同的库。

+0

谢谢!它的解决方式不同,但我希望这个答案能够帮助其他人 – Shaihi 2012-09-06 09:37:14