网关功能缺失 -->Matlab 2018a -->Mex

Posted

技术标签:

【中文标题】网关功能缺失 -->Matlab 2018a -->Mex【英文标题】:Gateway function missing -->Matlab 2018a -->Mex 【发布时间】:2019-10-23 18:35:30 【问题描述】:

我正在尝试从 Matlab R2018a 访问 C++ 代码,但出现错误

Invalid MEX-file 'C:\\C++ForMatlab\test.mexw64': Gateway function is
missing.

我在 Windows 7 上使用 VS2013 和 Matlab 2016 做了类似的事情,一切正常。

函数编译成功并按预期创建了 dll,但是当我尝试运行它时,我收到了错误消息。

操作系统 --> Windows 10

Matlab --> Matlab R2018a

C++ -> VS 2017

用VS2017编写的示例代码

文件名 --> test.cpp

 #include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

    mexPrintf("Hello World!\n");

在 Matlab 中 我输入以下命令

 mex test.cpp

我得到的输出是

Building with 'Microsoft Visual C++ 2017'.
MEX completed successfully.

但在那之后,当我尝试通过键入

运行时
Trial>> test

我收到以下错误

Invalid MEX-file 'C:\C++ForMatlab\test.mexw64': Gateway function is
missing

.

【问题讨论】:

看起来你做的一切都是正确的。您的 MATLAB 或 MSVC 安装可能存在问题?也许找到的mex.h 文件不是正确的?试试mex -v text.cpp,这将显示实际执行的编译器和链接器命令。这可能会帮助您发现问题(例如错误的目录)。 @CrisLuengo ,我尝试了 mex -v ,但看不到任何错误。输出提到使用 Microsoft Visual C++ 2017 构建,进一步说创建库 test.lib 和对象 test.exp,我成功获得了可执行文件 如果那里的所有路径看起来都正常(例如,指向您当前的 MATLAB 安装,而不是某个旧的),那么我无能为力。只需确保您的 MATLAB 发行版中没有 mex.h 文件。如果您是付费客户,请联系您的 MATLAB 代表或向他们的网站提交工单。 你确定你正在运行你刚刚编译的同一个 mex 例程吗?例如,您是否在同一目录中等?在命令行输入“which test”会得到什么? 如果您使用 Dependency Walker 之类的工具检查生成的 test.mexw64,或者使用 Visual Studio 控制台中的 dumpbin,您看到的导出符号是什么?有没有像 Z11mexFunctionBlaBlaFooBar... 这样的修饰名称? 【参考方案1】:

生成一个文件“ThisModule.def”并添加以下行。(用您自己的文件名交换templateSFunc)

库“templateSFunc.mexw64” 出口 mex函数

然后在VS中进入项目属性,将ThisModule.def添加到链接器/输入/模块定义文件选项中。

【讨论】:

OP没有VS项目,他们在MATLAB中使用mex命令来构建。

以上是关于网关功能缺失 -->Matlab 2018a -->Mex的主要内容,如果未能解决你的问题,请参考以下文章

win10下安装matlab r2018a破解版

ubuntu matlab2018a

Matlab2018a,英文正式版破解文件 libmwlmgrimpl.dll

Matlab R2018a版离线使用帮助文档方法

MATLAB R2018a 安装教程

Ubuntu 下安装 matlab2018a