Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to tell mex to link with the libstdc++.so.6 in /usr/lib instead of the one in the MATLAB directory?

Now mex in MATLAB 2012a only officially supports gcc 4.4.6 but I want to use gcc 4.7 at my own risk. Now If I compile something with mex directly, it will complain that

/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:
/usr/local/MATLAB/R2012a/sys/os/glnx86/libstdc++.so.6:
version `GLIBCXX_3.4.15' not found
(required by /usr/lib/i386-linux-gnu/libppl_c.so.4)

/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:
/usr/local/MATLAB/R2012a/sys/os/glnx86/libstdc++.so.6:
version `GLIBCXX_3.4.15' not found
(required by /usr/lib/i386-linux-gnu/libppl.so.9)

By strings /usr/lib/i386-linux-gnu/libstdc++.so.6 | grep 'GLIBCXX' I confirm that this libstdc++.so.6 has that version string. I reviewed mexopts.sh and modified the variable $RPATH and $MLIBS in that script, but it doesn't work. So if I don't use symbolic link, where can I config the path of the libstdc++.so.6 that mex uses? Thank you.

like image 455
ziyuang Avatar asked Mar 31 '12 20:03

ziyuang


1 Answers

It's a late answer, but I believe the cleanest, most Mathworks-approved and least invasive solution is to edit the .matlab7rc.sh script. This is a script used by the matlab script when you start MATLAB under UNIX-like systems. (See http://www.mathworks.ch/ch/help/matlab/ref/matlabunix.html)

Copy that script (found under {matlabroot}/bin) to the root of your project, or to your home directory. Then tell MATLAB to first search in the system directories for the C++ libraries, instead of its own directories. On my system I changed line 191:

191c191
<       LDPATH_PREFIX='/usr/lib/x86_64-linux-gnu'
---
>       LDPATH_PREFIX=''

(Simply setting LD_LIBRARY_PATH to the empty string is not a good solution, because that will prevent you from loading other third-party libraries.)

When this is done you might get the following message when running mex:

/usr/bin/ld: cannot find -lstdc++

This usually means that g++ is not installed. On a Debian-like system, run:

sudo apt-get install g++

From here on, you might still get an annoying warning about using a version of gcc beyond what is officially supported, but that is harmless and can be ignored.

like image 103
lindelof Avatar answered Oct 07 '22 04:10

lindelof