Mex compiling error 'g++: error: libmwlapack.lib: No such file or directory'

12 visualizaciones (últimos 30 días)
Kichang Lee
Kichang Lee el 15 de Abr. de 2019
Editada: Pirate Brown el 1 de Jun. de 2021
Hello,
I'm currently using Matlab R2019a with Mingw64 compiler.
The follwing code is a part of "SuiteSparse" installation.
s= 'mex -silent -largeArrayDims -DBLAS64 -O -DNPARTITION -DNMATRIXOPS -DNMODIFY -I. -I../../AMD/Include -I../../COLAMD/Include -I../../CHOLMOD/Include -I../Include -I../../SuiteSparse_config -I../../CHOLMOD/MATLAB/Windows spqr.cpp spqr_parallel.obj spqr_1colamd.obj spqr_1factor.obj spqr_1fixed.obj spqr_analyze.obj spqr_append.obj spqr_assemble.obj spqr_cpack.obj spqr_csize.obj spqr_cumsum.obj spqr_debug.obj spqr_factorize.obj spqr_fcsize.obj spqr_freefac.obj spqr_freenum.obj spqr_freesym.obj spqr_front.obj spqr_fsize.obj spqr_happly.obj spqr_happly_work.obj spqr_hpinv.obj spqr_kernel.obj spqr_larftb.obj spqr_panel.obj spqr_rconvert.obj spqr_rcount.obj spqr_rhpack.obj spqr_rmap.obj spqr_rsolve.obj spqr_shift.obj spqr_stranspose1.obj spqr_stranspose2.obj spqr_trapezoidal.obj spqr_type.obj spqr_tol.obj spqr_maxcolnorm.obj SuiteSparseQR_qmult.obj SuiteSparseQR.obj SuiteSparseQR_expert.obj spqr_mx.obj SuiteSparse_config.obj amd_1.obj amd_2.obj amd_aat.obj amd_control.obj amd_defaults.obj amd_dump.obj amd_global.obj amd_info.obj amd_order.obj amd_postorder.obj amd_post_tree.obj amd_preprocess.obj amd_valid.obj colamd.obj cholmod_aat.obj cholmod_add.obj cholmod_band.obj cholmod_change_factor.obj cholmod_common.obj cholmod_complex.obj cholmod_copy.obj cholmod_dense.obj cholmod_error.obj cholmod_factor.obj cholmod_memory.obj cholmod_sparse.obj cholmod_transpose.obj cholmod_triplet.obj cholmod_check.obj cholmod_read.obj cholmod_write.obj cholmod_amd.obj cholmod_analyze.obj cholmod_colamd.obj cholmod_etree.obj cholmod_factorize.obj cholmod_postorder.obj cholmod_rcond.obj cholmod_resymbol.obj cholmod_rowcolcounts.obj cholmod_rowfac.obj cholmod_solve.obj cholmod_spsolve.obj cholmod_super_numeric.obj cholmod_super_solve.obj cholmod_super_symbolic.obj rand48.obj spqr_mx_error.obj libmwlapack.lib libmwblas.lib'
eval(s)
yields the error message :
Error using mex
g++: error: libmwlapack.lib: No such file or directory
g++: error: libmwblas.lib: No such file or directory
I can find the above lib files at ....\MATLAB\R2019a\extern\lib\win64\mingw64
Why i got such error message?? Any helps would be appreciated.
  2 comentarios
Pirate Brown
Pirate Brown el 10 de Jun. de 2019
Editada: Pirate Brown el 1 de Jun. de 2021
I just had the same problem. The SuiteSparse Matlab installers are not adapted for newer versions of Matlab. I got spqr to work on Windows (64-bit) with Matlab2018a without METIS (I simply renamed the metis-5.1.0 folder in the SuiteSparse folder) by going to the directory SuiteSparse/SPQR/MATLAB/ and editing the file spqr_make.m and setting the paths of the libraries explicitly.
I.e., I replaced
lib = '"libmwlapack.lib" "libmwblas.lib"' ;
with
lib = '../../../extern/lib/win64/mingw64/libmwlapack.lib ../../../extern/lib/win64/mingw64/libmwblas.lib';
where the Suitesparse folder resides in MATLAB/R2018a/.
Then the libraries were found but I had to update some lapack/blas names for the 64 environment.
This is ugly but I simply made strings like this:
s1 = ' -Ddlarfg_=dlarfg -Ddlarf_=dlarf -Dzlarfg_=zlarfg -Dzlarf_=zlarf -Ddlarft_=dlarft -Ddlarfb_=dlarfb -Ddlarft_=dlarft -Ddlarfb_=dlarfb -Ddlarft_=dlarft ';
s2 = ' -Ddlarfb_=dlarfb -Ddlarft_=dlarft -Ddlarfb_=dlarfb -Dzlarft_=zlarft -Dzlarfb_=zlarfb -Dzlarft_=zlarft -Dzlarfb_=zlarfb -Dzlarft_=zlarft -Dzlarfb_=zlarfb ';
s3 = ' -Dzlarft_=zlarft -Dzlarfb_=zlarfb -Ddnrm2_=dnrm2 -Ddznrm2_=dznrm2 -Ddsyrk_=dsyrk -Ddgemm_=dgemm -Ddpotrf_=dpotrf -Ddtrsm_=dtrsm -Dzherk_=zherk ';
s4 = ' -Dzgemm_=zgemm -Dzpotrf_=zpotrf -Dztrsm_=ztrsm -Dzherk_=zherk -Dzgemm_=zgemm -Dzpotrf_=zpotrf -Dztrsm_=ztrsm -Ddtrsv_=dtrsv -Ddgemv_=dgemv ';
s5 = ' -Ddtrsm_=dtrsm -Ddgemm_=dgemm -Dztrsv_=ztrsv -Dzgemv_=zgemv -Dztrsm_=ztrsm -Dzgemm_=zgemm -Ddgemv_=dgemv -Ddtrsv_=dtrsv -Ddtrsm_=dtrsm ';
s6 = ' -Dzgemv_=zgemv -Dztrsv_=ztrsv -Dztrsm_=ztrsm -Ddgemm_=dgemm -Dzgemm_=zgemm ';
and then added them to the flag with this line
flags = [s1 s2 s3 s4 s5 s6 flags];
Then I installed SPQR with the spqr_install.m file and ran the demo and it worked.
I guess you'd have to make similar adaptations to the other folders.
I included the adapted file in this message. You should replace it with the file in the SuiteSparse/SPQR/MATLAB folder. Just make sure that the SuiteSparse folder itself is located in the R20xxx directory of Matlab, e.g. C:/Program Files/MATLAB/R2019a/Suitesparse. Just tested it, works also with 2019a.
William Warriner
William Warriner el 6 de Mayo de 2020
Thank you for this Pirate Brown. I was able to successfully build cholmod on R2019b using this advice.
It might be worth trying the commands
matlabroot
and
fullfile
to build the paths to the libraries in a more portable way.
Attached is a modified version of cholmod_make.m which incorporates your advice as well as the above commands. The changes start in the block on line 80.

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Introduction to Installation and Licensing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by