首先,我想编译 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)第二步中的
  • 是将“matlab\extern\include”中的“mexversion.rc”添加到项目中但是这个文件在我的电脑中不存在所以我做不到。
  • 在 Visual Studio 中,我需要在下面添加两个标题以编译程序。
  • 包括“stdafx.h”
  • 包括“maxrix.h”

  • 所以 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 并删除包含。

    printfmexPrintf

    在进入 MEX 项目设置之前,请注意 printf 指向 mexPrintfmex.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 环境变量。
  • 创建一个新的 DLL 项目。
  • 在 Property Manager 下(从 View 菜单),右键单击每个项目的构建配置并“添加现有属性表...”,选择 MATLABx64.props file from this GitHub repo
  • 关于matlab - mex 文件编译没有错误但在 matlab 中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27383807/

    10-12 18:30