Matlab mex“缺少依赖的共享库”

3

我正在使用Matlab 2017a创建一些mex文件。当我使用Visual Studio C++ 2017进行编译时,在我的电脑上运行得很好。然而,当我试图在另一台电脑上使用它们时,我会收到一个错误消息,内容为:

Error using mfss_mex.filter_uni
Invalid MEX-file  
'path_to_mex_file\mexfile.mexw64':
Missing dependent shared libraries:
'MSVCP140.dll' required by
'path_to_mex_file\mexfile.mexw64'
'VCRUNTIME140.dll' required by
'path_to_mex_file\mexfile.mexw64'

我认为可以通过在每台计算机上安装Visual Studio运行时来解决这个问题,但我想避免这样做。是否有一种方法可以使用Visual Studio C++编译器编译这些mex文件并避免与其依赖项的冲突?


我之前已经能够编译这些文件,使用的是另一个版本的Matlab和Visual Studio,而且没有创建这些依赖项。 - David Kelley
2个回答

1

Mathworks的solution是在任何出现此问题的计算机上安装C++编译器运行时。

我发现我只需要将有问题的.dll文件(MSVCP140.dllVCRUNTIME140.dll)复制到与我的.mexw64文件相同的文件夹中,就可以顺利运行一切。


我们不能将.dll和.mex64文件放置在不同的目录中,并使用addpath命令添加这些目录的路径吗? - tauseef_CuriousGuy
我刚遇到了一个情况,证实了.dll文件需要与.mexw文件在同一个目录中。 - David Kelley
1
我也遇到了同样的情况。如果一个Matlab程序引用了一个mexw文件中定义的.dll函数,那么它们(Matlab程序、mexw和.dll)都必须在同一个目录下。将它们放在不同的目录中并通过“addpath”命令添加路径是行不通的! - tauseef_CuriousGuy

0

我曾经遇到过同样的问题。我通过在MATLAB中重新编译原始的.c文件来解决它; 如果你有原始的.c文件,简单的方法是:

mex -setup
mex NAME.c

(这里的NAME代表您的无效.mexw64文件的名称) 例如,在这种情况下:

mex mexfile.c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接