在计算机之间共享mex64文件

时间:2010-04-08 16:50:35

标签: dll matlab windows-7-x64

我的机器上编译了一个mex64 dll。我使用Matlab 2009b和VS2008 Pro来编译dll。这个DLL在我的Matlab安装上运行正常。

我想让一位同事使用dll,因此我将其发送给他,并在尝试使用dll时收到以下错误消息:

  

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

我目前的假设是,这是因为他使用较旧的Matlab版本或缺少我拥有的dll。我跑依赖检查员并要求他检查他是否有所有列出的dll。

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

还有什么其他原因导致这种情况,Matlab版本可以有所作为吗? (我的意思是R2009a,当我有R2009B,而不是一个巨大的版本差异)


另一个人有Matlab R2009a。如果我在计算机上编译并将它交付给他,那么mex不应该正常工作吗?

这只会留下缺少的依赖dll吗?

4 个答案:

答案 0 :(得分:1)

问题很奇怪,但我可以确认它存在。

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

>> 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之前)我的计算机上运行了相同的库。

答案 1 :(得分:0)

通常,MEX文件应该适用于不同版本的Matlab;特别是,它们应该是向前兼容的。你是对的;听起来像是一个dll问题。

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

通常情况下,配置Matlab的“mex -setup”以使用随Matlab一起分发的Lcc编译器可以解决这个问题,但64位Windows AFAIK不支持它。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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