用于在 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 命令的主要内容,如果未能解决你的问题,请参考以下文章