Matlab Mex ссылки на Linux - PullRequest
       16

Matlab Mex ссылки на Linux

0 голосов
/ 19 декабря 2018

У меня есть набор mex-файлов, использующих Armadillo и BLAS / LAPACK, которые я могу скомпилировать в Windows со следующим:

srcFolder = pwd;
outputFolder = 'some/other/folder/';

blaslib = fullfile(matlabroot, 'extern', 'lib', computer('arch'), 'microsoft', 'libmwblas.lib');
lapacklib = fullfile(matlabroot, 'extern',  'lib', computer('arch'), 'microsoft', 'libmwlapack.lib');

flags = {'-O', '-outdir', outputFolder};
mex(flags{:}, fullfile(srcFolder, 'filter_uni.cpp'), blaslib, lapacklib); 

Когда я пытаюсь это сделать в linux, компоновщик, кажется, не находит.so файлы, которые я предоставляю:

blaslib = fullfile(matlabroot, 'bin', computer('arch'), 'libmwblas.so')
lapacklib = fullfile(matlabroot, 'bin', computer('arch'), 'libmwlapack.so')
mex(flags{:}, fullfile(srcFolder, 'filter_uni.cpp'), blaslib, lapacklib, '-v');

Частичный вывод:

...
/usr/bin/g++ -pthread -Wl,--no-undefined  -shared -O -Wl,--version-script,"/usr/local/Matlab/R2018a/extern/lib
/glnxa64/c_exportsmexfileversion.map" /tmp/mex_8538435756757296_40383/filter_uni.o /tmp/mex_8538435756757296_4
0383/cpp_mexapi_version.o   /usr/local/Matlab/R2018a/bin/glnxa64/libmwblas.so /usr/local/Matlab/R2018a/bin/gln
xa64/libmwlapack.so  -Wl,--as-needed -Wl,-rpath-link,/usr/local/Matlab/R2018a/bin/glnxa64 -L"/usr/local/Matlab
/R2018a/bin/glnxa64" -Wl,-rpath-link,/usr/local/Matlab/R2018a/extern/bin/glnxa64 -L"/usr/local/Matlab/R2018a/e
xtern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lmat -lm -lstdc++ -o /home/dkelley/MFSS/+mfss_mex/filter_uni.
mexa64
Error using mex
/tmp/mex_8538435756757296_40383/filter_uni.o: In function `filter_uni_mex(arma::Mat<double>,
arma::Cube<double>, arma::Mat<double>, arma::Cube<double>, arma::Cube<double>, arma::Mat<double>,
arma::Cube<double>, arma::Cube<double>, arma::Mat<double>, arma::Mat<double>, arma::Mat<double>,
arma::Mat<double>, _Tau)':
filter_uni.cpp:(.text+0x23db): undefined reference to `ddot'
filter_uni.cpp:(.text+0x3310): undefined reference to `dgemv'
filter_uni.cpp:(.text+0x5fca): undefined reference to `ddot'
filter_uni.cpp:(.text+0x66a1): undefined reference to `dgemv'
filter_uni.cpp:(.text+0x6780): undefined reference to `dgemv'
filter_uni.cpp:(.text+0x6b01): undefined reference to `dgemv'
filter_uni.cpp:(.text+0x6be0): undefined reference to `dgemv'
...

Есть ли другой способ указать эти .so файлы, которые должны использоваться в linux?

...