网关功能缺失 -->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的主要内容,如果未能解决你的问题,请参考以下文章