mex文件编译没有错误,但不能在matlab中工作
首先,我想编译MatConvNet库,以便在本教程的windows窗体中使用 () 但我不能。然后我认为最好编译一个非常简单的文件,然后再编译库 我有MatlabR2013A 64位和VisualStudio2010 64位 我的程序Test.cppmex文件编译没有错误,但不能在matlab中工作,matlab,visual-studio,64-bit,mex,Matlab,Visual Studio,64 Bit,Mex,首先,我想编译MatConvNet库,以便在本教程的windows窗体中使用 () 但我不能。然后我认为最好编译一个非常简单的文件,然后再编译库 我有MatlabR2013A 64位和VisualStudio2010 64位 我的程序Test.cpp #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) { printf("Hello! :)\n"); }
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
printf("Hello! :)\n");
}
我可以使用mex Test.cpp在matlab中编译Test.cpp
当我输入test时,输出是Hello!:)强>
我还可以根据下面的教程设置正确的配置,并且编译时不会出错
(一)
(二)
但是当我在Matlab中运行它时,什么都没有发生。没有输出,Matlab不会给我任何错误。
有什么问题吗?
注意:
- 包括“stdafx.h”
- 包括“maxrix.h”
#include "mex.h"
#include "stdafx.h"
#include "matrix.h"
void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
printf("Hello! :)\n");
}
printf
仅适用于本机C。您需要使用。因此,您的代码应该是:
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
mexPrintf("Hello! :)\n");
}
通常,打印到MEX脚本中的标准输出不会出现在MATLAB命令提示符中。如果要在MATLAB中显示消息,需要使用mexPrintf
而不是printf
为了明确起见,如果您查阅mexPrintf
文档,可以在末尾看到一个警告:
在cmex文件中,必须调用mexPrintf而不是printf来显示字符串
顺便说一句,我推荐这个很棒的MEX教程:。这是我用来开始在MATLAB中编程MEX包装器的教程。您还将看到第一个示例与您尝试运行的“Hello World”口径相同:)
祝你好运 如何编译C/CPP文件并创建mex文件以在Matlab中使用 我通过@rayryeng help和()@jorre的帖子找到了解决方案 这是用Matlab R2013a 64位和Visual Studio 2010 64位测试的 测试.cpp
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
mexPrintf("Hello World123! :)\n");
}
< P> >在VS> >强> VisualC++ > > ->空项目中创建一个新项目。
项目的名称将是mex文件的名称。
您可以稍后更改它
2.将调试更改为发布
右键单击项目->属性->配置属性->常规
预先编译的标题骗局 Visual Studio版本的代码存在一个问题,即预编译的头文件stdafx.h导致编译器忽略其上的任何代码(mex.h包括): 将stdafx.h include移到顶部,或在项目设置中关闭PCH并删除include
printf
与mexPrintf
进入MEX项目设置之前,请注意,printf
指向mexPrintf
由MEX.h
提供:
#define printf mexPrintf
因此,使用printf
不是问题,但可能不是好的做法。如果在包含mex.h之后重新定义printf
,或者由于PCH头而无法获得此定义,则会出现问题
关于VisualStudio中的MEX 我发布了一篇更正式的文章,作为对这个主题中更常见的参考问题的回答,我还建议在这里使用VisualStudio属性表来设置您的项目以构建MEX文件。详细信息见参考文章,但您只需:
MATLAB\u ROOT
环境变量@rayryeng我使用了mexPrintf,IntelliSense识别了它,但我得到了以下错误:错误2错误C3861:“mexPrintf”:标识符不是found@Iman-在MATLAB中编译。不要在VS中编译。同样,如果要在VS中成功编译,需要包含
mexversion.rc
的步骤。编译代码的最佳方法是直接在MATLAB中进行。所有依赖项都设置为u
#define printf mexPrintf