【发布时间】:2014-09-23 15:01:59
【问题描述】:
由于某些原因,我必须在 Visual Studio 环境下编译 MEX 文件。有很多教程,我的 MEX 文件运行良好。但是,有几个MEX选项,比如mex选项中的-largeArrayDims,在VS环境下不知道在哪里开启。谁能提供帮助?
【问题讨论】:
标签: matlab visual-studio mex
由于某些原因,我必须在 Visual Studio 环境下编译 MEX 文件。有很多教程,我的 MEX 文件运行良好。但是,有几个MEX选项,比如mex选项中的-largeArrayDims,在VS环境下不知道在哪里开启。谁能提供帮助?
【问题讨论】:
标签: matlab visual-studio mex
-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。
一些补充说明:
/EXPORT:mexFunction 而不是.def 文件。使用单个导出函数,这要简单得多。// prototype the break handling functions in libut (C library)
extern "C" bool utIsInterruptPending();
extern "C" void utSetInterruptPending(bool);
【讨论】:
with a .props extension。 mex 命令本质上以相同的方式配置构建(编译和链接)。只需在运行mex 时尝试-v 开关即可查看使用的不同命令行。这些属性表设置为在 Visual Studio 中执行相同的操作。