用于在 Windows 中的犰狳中构建 armaMex_demo.cpp 的 Matlab mex 命令

Posted

技术标签:

【中文标题】用于在 Windows 中的犰狳中构建 armaMex_demo.cpp 的 Matlab mex 命令【英文标题】:Matlab mex command for building armaMex_demo.cpp in Armadillo in Windows 【发布时间】:2018-07-19 20:51:50 【问题描述】:

我在使用 Matlab (2018a) 在 Windows 中的 Armadillo (armadillo-8.500.1) 中混合 armaMex_demo_cpp 时遇到问题。

到目前为止,我正在尝试命令:

>> mex -LC:\Users\Test\Documents\Armadillo\armadillo-8.500.1-mod_for_windows\include\armadillo -LC:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin\gfortran -IC:\Users\Test\Documents\Armadillo\armadillo-8.500.1-mod_for_windows\include armaMex_demo.cpp

并获取错误消息(截断):

Building with 'Microsoft Visual C++ 2017'.
Error using mex
armaMex_demo.cpp
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\random(31): error C4430: missing type specifier - int
assumed. Note: C++ does not support default-int
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\random(31): error C2146: syntax error: missing ';' before
identifier 'ARMA_USE_BLAS'
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\random(31): error C2143: syntax error: missing ';' before
''
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\random(31): error C2447: '': missing function header
(old-style formal list?)
c:\users\test\documents\armadillo\armadillo-8.500.1-mod_for_windows\include\armadillo_bits/arma_rng_cxx11.hpp(28): error C2039: 'mt19937_64': is not a
member of 'std'
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\atomic(42): note: see declaration of 'std'
c:\users\test\documents\armadillo\armadillo-8.500.1-mod_for_windows\include\armadillo_bits/arma_rng_cxx11.hpp(28): error C3083: 'mt19937_64': the symbol
to the left of a '::' must be a type
c:\users\test\documents\armadillo\armadillo-8.500.1-mod_for_windows\include\armadillo_bits/arma_rng_cxx11.hpp(28): error C2039: 'result_type': is not a
member of 'std'
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\atomic(42): note: see declaration of 'std'
c:\users\test\documents\armadillo\armadillo-8.500.1-mod_for_windows\include\armadillo_bits/arma_rng_cxx11.hpp(28): error C3646: 'seed_type': unknown
override specifier

有人知道我在这里可能做错了什么吗?

有人有一个可以在 Windows 中为 armaMex_demo.cpp 构建 mex 文件的工作 mex 命令吗?

【问题讨论】:

【参考方案1】:

似乎与我如何包含/引用 BLAS 有关。我曾经在 config.hpp 中取消注释“#define ARMA_USE_BLAS”行。通过留下评论,我用这个 mex 命令:

mex -LC:\Users\Test\Documents\Armadillo\armadillo-8.500.1-mod_for_windows\include\armadillo -LC:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32 \bin\gfortran -IC:\Users\Test\Documents\Armadillo\armadillo-8.500.1-mod_for_windows\include armaMex_demo.cpp

我只得到这个错误:

使用“Microsoft Visual C++ 2017”构建。

使用 mex 时出错 armaMex_demo.cpp C:\Users\Test\Documents\Armadillo\armadillo-8.500.1-mod_for_windows\mex_interface\armaMex_demo.cpp(44): 错误 C2668: 'arma::size': 模糊调用 重载函数

c:\users\test\documents\armadillo\armadillo-8.500.1-mod_for_windows\include\armadillo_bits/fn_size.hpp(38):注意:可能是 'const

arma::SizeMat arma::size(const T1 &)' 和 [ T1=arma::mat ]

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\xutility(1654): note: or 'arma::uword std::size(const _Container &)' 和 [ _Container=arma::mat ] C:\Users\Test\Documents\Armadillo\armadillo-8.500.1-mod_for_windows\mex_interface\armaMex_demo.cpp(44):注意:在尝试匹配参数列表时 '(arma::mat)'

【讨论】:

【参考方案2】:

通过换行

如果(大小(X)!=大小(Y))

如果 ( X.size() != Y.size() )

在 armaMex_demo.cpp 中

mexing(和 mex 调用)在 Matlab 的 Windows 中工作。

【讨论】:

以上是关于用于在 Windows 中的犰狳中构建 armaMex_demo.cpp 的 Matlab mex 命令的主要内容,如果未能解决你的问题,请参考以下文章

犰狳错误的字段索引

iOS 和犰狳(mach-o,但不是为 iOS 模拟器构建的)

如何在犰狳中更新稀疏矩阵的值

犰狳矩阵中的多种数据类型

犰狳中的稀疏 svd (C++)

当 B 是犰狳中的对称矩阵时的 A * B 计算