Matlab mex命令在Windows的Armadillo中构建armaMex_demo.cpp

时间:2018-07-19 20:51:51

标签: windows visual-studio-2017 mex armadillo

我在Windows中使用Matlab(2018a)困扰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文件吗?

2 个答案:

答案 0 :(得分:0)

似乎与我包含/引用BLAS的方式有关。我以前在config.hpp中没有注释“ #define ARMA_USE_BLAS”行。通过此mex命令,将其注释为I:

  
    

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:或'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)'

答案 1 :(得分:0)

并通过更改行

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

if(X.size()!= Y.size())

在armaMex_demo.cpp中

混合(和mex调用)可在Windows中从Matlab运行。