首先,我想编译 MatConvNet 库,以便在本教程的 windows 形式中使用
( Compiling MatConvNet on Windows )
但我不能。然后我认为最好编译一个非常简单的文件,然后再编译库。
我有 Matlab R2013a 64 位 和 Visual Studio 2010 64 位 。
我的程序Test.cpp
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
printf("Hello! :)\n");
}
我可以用 mex Test.cpp 在 matlab 中编译 Test.cpp
当我输入 test 输出是 你好! :)
我也可以根据下面的教程设置正确的配置并编译它而不会出错。
1) http://coachk.cs.ucf.edu/GPGPU/Compiling_a_MEX_file_with_Visual_Studio2.htm
2) http://www.orangeowlsolutions.com/archives/490
但是当我在 Matlab 中运行它时,什么也没有发生。没有输出,Matlab 没有给我任何错误。
有什么问题?
注意:
(1)第二步中的
所以 Visual Studio 中的 Test.cpp 是:
#include "mex.h"
#include "stdafx.h"
#include "matrix.h"
void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
printf("Hello! :)\n");
}
最佳答案
预编译的头文件恶作剧
代码的 Visual Studio 版本的一个问题是预编译的头文件 stdafx.h 导致编译器忽略它上面的任何代码 (包括 mex.h):
#include "mex.h"
#include "stdafx.h" // ANYTHING above here is IGNORED!
#include "matrix.h"
将 stdafx.h 包含到顶部或在项目设置中关闭 PCH 并删除包含。
printf
与 mexPrintf
在进入 MEX 项目设置之前,请注意
printf
指向 mexPrintf
由 mex.h
提供:#define printf mexPrintf
因此,使用
printf
不是问题,但可能不是好的做法。如果您在包含 mex.h 后重新定义 printf
或由于 PCH header 而无法获得此定义,则会出现问题。关于 Visual Studio 中的 MEX
我发布了一个更正式的 guide to setting up a Visual Studio projects for building MEX files 作为对这个主题更常见的引用问题的回答,我还建议在这里使用 Visual Studio 属性表来设置您的项目以构建 MEX 文件。详细信息在引用的帖子中,但您只需要:
MATLAB_ROOT
环境变量。 关于matlab - mex 文件编译没有错误但在 matlab 中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27383807/