与Visual Studio编译时MEX选项(MEX options when compiling

2019-10-21 01:03发布

对于一些原因,我必须编译Visual Studio环境下,我的MEX文件。 有很多教程,我的MEX文件都工作正常。 然而,也有少数MEX选项,说-largeArrayDimsmex的选择,我不知道哪里来的VS环境下开启。 任何人都可以提供帮助?

Answer 1:

所述-largeArrayDims选项是一个切换到mex在MATLAB命令简单地指示不限定MX_COMPAT_32 。 因此,在Visual Studio中,你没有,因为这不是默认定义做任何事情。 如果你想在相反的行为( -compatibleArrayDims ),然后定义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-文件扩展名等)。 对于32位或64位MATLAB自动工作的单个属性表可以发现在GitHub上 。

添加属性页在属性管理器中的MEX项目中的每个构建配置(在配置右击如Debug | x64 ,并选择“添加现有属性表”看, 这个帖子的详细说明 。

一些其他注意事项:

  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);


文章来源: MEX options when compiling with Visual Studio