【问题标题】:MEX options when compiling with Visual Studio使用 Visual Studio 编译时的 MEX 选项
【发布时间】:2014-09-23 15:01:59
【问题描述】:

由于某些原因,我必须在 Visual Studio 环境下编译 MEX 文件。有很多教程,我的 MEX 文件运行良好。但是,有几个MEX选项,比如mex选项中的-largeArrayDims,在VS环境下不知道在哪里开启。谁能提供帮助?

【问题讨论】:

    标签: matlab visual-studio mex


    【解决方案1】:

    -largeArrayDims 选项是对 MATLAB 中mex 命令的切换,它只是表示不定义MX_COMPAT_32。因此,在 Visual Studio 中,您无需执行任何操作,因为默认情况下未定义。如果您想要相反的行为 (-compatibleArrayDims),则在 Preprocessor 部分定义 MX_COMPAT_32。来自 tmwtypes.h:

    tmwtypes.h

    #ifdef MX_COMPAT_32
    typedef int mwSize;
    typedef int mwIndex;
    typedef int mwSignedIndex;
    #else
    typedef size_t    mwSize;         /* unsigned pointer-width integer */
    typedef size_t    mwIndex;        /* unsigned pointer-width integer */
    typedef ptrdiff_t mwSignedIndex;  /* a signed pointer-width integer */
    #endif
    

    一般来说,使用属性表来设置构建 MEX 文件所需的所有设置(库依赖项、标题、MEX 文件扩展名等)很方便。可在at GitHub 找到自动适用于 32 位或 64 位 MATLAB 的单个属性表。

    在属性管理器中为MEX项目的每个构建配置添加属性表(右键单击Debug | x64等配置并选择“添加现有属性表”。见this post for detailed instructions

    一些补充说明:

    1. 我更喜欢使用/EXPORT:mexFunction 而不是.def 文件。使用单个导出函数,这要简单得多。
    2. 属性表制作一个清单文件,但实际上没有必要。
    3. 我包含了 libut.lib,它提供了一些很好的函数来检测 MEX 文件中的中断 (CTRL-C)。相关声明(虽然这里离题了):
    // prototype the break handling functions in libut (C library)
    extern "C" bool utIsInterruptPending();
    extern "C" void utSetInterruptPending(bool);
    

    【讨论】:

    • 谢谢,这很有帮助。所以过程是,我制作一个 XML 文件并将其合并到配置中? mex 命令在调用 CL 编译器(或链接器)时是否执行相同的过程?
    • @JasonYuan 文件的内容是XML,是的,但应该保存with a .props extensionmex 命令本质上以相同的方式配置构建(编译和链接)。只需在运行mex 时尝试-v 开关即可查看使用的不同命令行。这些属性表设置为在 Visual Studio 中执行相同的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多