我的机器上编译了一个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吗?
答案 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连接器。