0

我在我的机器上编译了一个 mex64 dll。我使用 Matlab 2009b 和 VS2008 Pro 来编译 dll。该 dll 在我的 Matlab 安装上运行良好。

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

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

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

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

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


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

这是否只留下一个丢失的依赖 dll?

4

4 回答 4

1

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

使用正确安装并在路径中的 matlab 预构建库,有时我会遇到相同的错误。如果我在命令行中输入函数名称,该函数是可见的并且会自动完成。但是,在我“cd”到包含 .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-2R​​QL4L/

在我的情况下,两个 DLL 没有正确显示,即使它们在我的系统和路径中。我将 DLL 复制到 windows/system32 文件夹中,库函数现在可以正常工作。特别奇怪的是几天前(在移动 DLL 之前)我的电脑上运行了同一个库。

于 2012-08-21T14:36:06.003 回答
0

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

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

通常,将 Matlab 的“mex -setup”配置为使用与 Matlab 一起分发的 Lcc 编译器可能是解决此问题的一种方法,但它不支持 64 位 Windows AFAIK。

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

于 2010-04-08T20:00:09.243 回答
0

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

于 2010-04-09T13:08:12.140 回答
0

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

于 2010-04-25T14:00:13.083 回答