Reputation: 151
I have a MEX-file that compiles and runs perfectly on CentOS 7.7 and MATLAB R2018b. I can compile it on Ubuntu 16.04 with MATLAB R2016b, but when I try to run it I get
libmkl_rt.so: cannot open shared object file: No such file or directory.
I have tried
setenv('LD_LIBRARY_PATH',[getenv('LD_LIBRARY_PATH'),':/opt/intel/compilers_and_libraries_2019.1.144/linux/mkl/lib/intel64_lin'])
and
setenv('LD_RUN_PATH',[getenv('LD_RUN_PATH'),':/opt/intel/compilers_and_libraries_2019.1.144/linux/mkl/lib/intel64_lin'])
As per this thread, with no luck. Still the same issue.
This is the command I use to compile:
mex -v -I/usr/include -I/opt/intel/mkl/include station_cov.cpp -L/lib64 -larmadillo -L/opt/intel/mkl/lib/intel64 -lmkl_core -lmkl_sequential
It seems as though it is a path issue but I just can not figure out where I am going wrong. Any help would be greatly appreciated.
EDIT:
./station_cov.mexa64: /usr/local/MATLAB/R2016b/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./station_cov.mexa64)
linux-vdso.so.1 => (0x00007fff1f5ca000)
libarmadillo.so.9 => /usr/lib/x86_64-linux-gnu/libarmadillo.so.9 (0x00007fb5f7592000)
libmwlapack.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwlapack.so (0x00007fb5f71e3000)
libmwblas.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwblas.so (0x00007fb5f6fc7000)
libmx.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmx.so (0x00007fb5f6c3a000)
libmex.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmex.so (0x00007fb5f6a02000)
libstdc++.so.6 => /usr/local/MATLAB/R2016b/sys/os/glnxa64/libstdc++.so.6 (0x00007fb5f66f0000)
libgcc_s.so.1 => /usr/local/MATLAB/R2016b/sys/os/glnxa64/libgcc_s.so.1 (0x00007fb5f64da000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb5f6110000)
libmkl_rt.so => not found
libarpack.so.2 => /usr/lib/libarpack.so.2 (0x00007fb5f5ec5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb5f5bbb000)
/lib64/ld-linux-x86-64.so.2 (0x000055b58a794000)
libut.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libut.so (0x00007fb5f58fc000)
libmwbinder.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwbinder.so (0x00007fb5f56e8000)
libmwompwrapper.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwompwrapper.so (0x00007fb5f54e2000)
libboost_system.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_system.so.1.56.0 (0x00007fb5f52df000)
libmwcpp11compat.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwcpp11compat.so (0x00007fb5f50c0000)
libtbb.so.2 => /usr/local/MATLAB/R2016b/bin/glnxa64/libtbb.so.2 (0x00007fb5f4e75000)
libtbbmalloc.so.2 => /usr/local/MATLAB/R2016b/bin/glnxa64/libtbbmalloc.so.2 (0x00007fb5f4c23000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb5f4a05000)
libmwresource_core.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwresource_core.so (0x00007fb5f4803000)
libmwi18n.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwi18n.so (0x00007fb5f44d9000)
libmwfl.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwfl.so (0x00007fb5f4128000)
libboost_chrono.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_chrono.so.1.56.0 (0x00007fb5f3f22000)
libboost_date_time.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_date_time.so.1.56.0 (0x00007fb5f3d10000)
libboost_filesystem.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_filesystem.so.1.56.0 (0x00007fb5f3afa000)
libboost_log.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_log.so.1.56.0 (0x00007fb5f381d000)
libboost_regex.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_regex.so.1.56.0 (0x00007fb5f350c000)
libboost_signals.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_signals.so.1.56.0 (0x00007fb5f32f6000)
libboost_thread.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_thread.so.1.56.0 (0x00007fb5f30d5000)
libicudata.so.56 => /usr/local/MATLAB/R2016b/bin/glnxa64/libicudata.so.56 (0x00007fb5f16ef000)
libicuuc.so.56 => /usr/local/MATLAB/R2016b/bin/glnxa64/libicuuc.so.56 (0x00007fb5f1358000)
libicui18n.so.56 => /usr/local/MATLAB/R2016b/bin/glnxa64/libicui18n.so.56 (0x00007fb5f0ede000)
libicuio.so.56 => /usr/local/MATLAB/R2016b/bin/glnxa64/libicuio.so.56 (0x00007fb5f0cd0000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb5f0ab6000)
libmwservices.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwservices.so (0x00007fb5f0483000)
libmwmpath.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwmpath.so (0x00007fb5f01f5000)
libmwm_dispatcher.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwm_dispatcher.so (0x00007fb5efefb000)
libmwmlutil.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwmlutil.so (0x00007fb5ef6d9000)
liblapack.so.3 => /usr/lib/liblapack.so.3 (0x00007fb5eeef6000)
libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fb5eec94000)
libgfortran.so.3 => /usr/local/MATLAB/R2016b/sys/os/glnxa64/libgfortran.so.3 (0x00007fb5ee976000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb5ee76e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb5ee569000)
libexpat.so.1 => /usr/local/MATLAB/R2016b/bin/glnxa64/libexpat.so.1 (0x00007fb5ee341000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fb5ee108000)
libboost_serialization.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_serialization.so.1.56.0 (0x00007fb5edea8000)
libunwind.so.8 => /usr/local/MATLAB/R2016b/bin/glnxa64/libunwind.so.8 (0x00007fb5edc88000)
libssl.so.1.0.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libssl.so.1.0.0 (0x00007fb5eda1d000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fb5ed5c2000)
libmwdisplay_device.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwdisplay_device.so (0x00007fb5ed3ba000)
libmwcppmicroservices.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwcppmicroservices.so (0x00007fb5ed1b8000)
libmwregexp.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwregexp.so (0x00007fb5ecf6f000)
libmwsettingscore.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwsettingscore.so (0x00007fb5ecb2a000)
libmwms.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwms.so (0x00007fb5ec4e6000)
libmwnativedisplay.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwnativedisplay.so (0x00007fb5ec2db000)
libmwopccore.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwopccore.so (0x00007fb5ec084000)
libmwopcmodel.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwopcmodel.so (0x00007fb5ebe09000)
libmwopczippackage.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwopczippackage.so (0x00007fb5ebbe5000)
libmwopcmwservices.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwopcmwservices.so (0x00007fb5eb985000)
libmwwebproxy.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwwebproxy.so (0x00007fb5eb778000)
libmwkeybrd.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwkeybrd.so (0x00007fb5eb575000)
libboost_iostreams.so.1.56.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libboost_iostreams.so.1.56.0 (0x00007fb5eb361000)
libCppMicroServices.so.2.1.0 => /usr/local/MATLAB/R2016b/bin/glnxa64/libCppMicroServices.so.2.1.0 (0x00007fb5eb0cc000)
libPocoCrypto.so.31 => /usr/local/MATLAB/R2016b/bin/glnxa64/libPocoCrypto.so.31 (0x00007fb5eaeaa000)
libPocoFoundation.so.31 => /usr/local/MATLAB/R2016b/bin/glnxa64/libPocoFoundation.so.31 (0x00007fb5eaac8000)
libPocoJSON.so.31 => /usr/local/MATLAB/R2016b/bin/glnxa64/libPocoJSON.so.31 (0x00007fb5ea87a000)
libPocoNet.so.31 => /usr/local/MATLAB/R2016b/bin/glnxa64/libPocoNet.so.31 (0x00007fb5ea55a000)
libPocoNetSSL.so.31 => /usr/local/MATLAB/R2016b/bin/glnxa64/libPocoNetSSL.so.31 (0x00007fb5ea313000)
libPocoUtil.so.31 => /usr/local/MATLAB/R2016b/bin/glnxa64/libPocoUtil.so.31 (0x00007fb5ea0a0000)
libPocoXML.so.31 => /usr/local/MATLAB/R2016b/bin/glnxa64/libPocoXML.so.31 (0x00007fb5e9e13000)
libxerces-c-3.1.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libxerces-c-3.1.so (0x00007fb5e977c000)
libmwflnetwork.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflnetwork.so (0x00007fb5e94d2000)
libmwflstoragevfs.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflstoragevfs.so (0x00007fb5e921b000)
libmwflstorageprovider.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflstorageprovider.so (0x00007fb5e8fe1000)
libmwstoragefileprovider.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwstoragefileprovider.so (0x00007fb5e8da8000)
libmwstorageshlibstoragesys.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwstorageshlibstoragesys.so (0x00007fb5e8b65000)
libmwstoragefilefolderobserver.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwstoragefilefolderobserver.so (0x00007fb5e8951000)
libmwsearch_path_interfaces.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwsearch_path_interfaces.so (0x00007fb5e8745000)
libmwxmlcore.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwxmlcore.so (0x00007fb5e84cf000)
libopenblas.so.0 => /usr/lib/libopenblas.so.0 (0x00007fb5e643b000)
libquadmath.so.0 => /usr/local/MATLAB/R2016b/sys/os/glnxa64/libquadmath.so.0 (0x00007fb5e61fd000)
libminizip.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libminizip.so (0x00007fb5e5ff0000)
libmwflcrypto.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflcrypto.so (0x00007fb5e5dc3000)
libmwflcryptoutils.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflcryptoutils.so (0x00007fb5e5bb7000)
libmwflcryptocryptopp.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflcryptocryptopp.so (0x00007fb5e5667000)
libmwflstorageevents.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflstorageevents.so (0x00007fb5e5460000)
libmwstoragesharedlib.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwstoragesharedlib.so (0x00007fb5e5243000)
libmwflcryptoopenssl.so => /usr/local/MATLAB/R2016b/bin/glnxa64/libmwflcryptoopenssl.so (0x00007fb5e5019000)
Upvotes: 1
Views: 1425
Reputation: 60645
Your version of MATLAB requires GCC 4.9.x for compiling MEX-files. You likely have version 5.3 instead.
When compiling with version 5.3, your binary needs to link to the C++ library that comes with version 5.3, or a newer one.
MATLAB is compiled with 4.9, and needs that version of the C++ library, or a newer one.
MATLAB carries its own version of the GCC C++ library (v 4.9), and links to it way before your MEX-files is loaded. When your MEX-file is linked in, there’s already a version of the C++ library loaded, but it’s the wrong version.
There are two ways of fixing this:
The official way: Install GCC 4.9.x, and make sure you use it when compiling your MEX-file by adding appropriate arguments to the mex
command. You will have to recompile your dependencies too (Armadillo and the MKL, which seem to depend on a host of other libraries judging from your ldd
output).
The bad way: Delete the C++ libs from the MATLAB directory and have it use the ones that come with the system (which are newer and therefore this should work). We’re talking about the files /usr/local/MATLAB/R2016b/sys/os/glnxa64/libstdc++.so.6
and /usr/local/MATLAB/R2016b/sys/os/glnxa64/libgcc_s.so.1
. This solution is sooooo much easier than the other one, I cannot recommend anything else. I have done this with many different versions of Linux and MATLAB in the past, but likely not with Ubuntu 16 and MATLAB R2016a, so try it out carefully by moving the files away or renaming them, so you can undo the change if MATLAB won’t boot. This does however require admin rights, so it’s not a viable solution for everyone.
Upvotes: 1