Version GLIBCXX_3.4.11 not found (required by buildW.mexglx)

徘徊边缘 提交于 2019-12-01 04:01:39

Matlab (and a ton of other commercial programs like Steam, Mathematica, etc.) ships its own version of the libstdc++ so:

/usr/local/MATLAB/R2011a/bin/glnx86/../../sys/os/glnx86/libstdc++.so.6

The problem is that when you start matlab, it loads this one first, and since it is loaded, this version is used to resolve all dynamic loader dependencies.

You compiled with your system GCC and linked to your system's libstdc++, which is newer. The resulting binary then requests symbols of a certain (newer) version and the loader does not find them in the already loaded version (i.e. Matlab's).

There are two ways to solve this:

1a. Delete/rename Matlab's libstdc++ so and symlink your system's version to the exact same name:

    sudo rm /usr/local/MATLAB/R2011a/bin/glnx86/../../sys/os/glnx86/libstdc++.so.6
    sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/MATLAB/R2011a/bin/glnx86/../../sys/os/glnx86/libstdc++.so.6

1b. Delete Matlab's version and let your OS's loader pick up the system's libstdc++:

    sudo rm /usr/local/MATLAB/R2011a/bin/glnx86/../../sys/os/glnx86/libstdc++.so.6

1c. Use the environment variable LD_PRELOAD to "inject" the system's version of libstdc++ into the execution environment before anything else, which prevents the old Matlab version to be loaded:

    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 matlab
  1. Install the GCC version Matlab expects and modify the Mex building options (or use update-alternatives) to use that instead of the system's GCC.

Note that for 1-3, you may need to mess with additional libraries like libgcc_s.so, in the same way.

The reason that using the new version works is because of the symbol versioning scheme employed in libstdc++ internally (hence also the detailed error message mentioning the version). A similar "fix" needs to be done for Steam on e.g. Arch Linux, where several system libraries Steam uses are linked to the newer libstdc++.

The real solution is for Matlab not to ship the libstdc++ so and instead use the OS provided version.

Link it with something like this, depending on the version.

sudo ln -s /usr/lib/libstdc++.so.6.0.9 libstdc++.so.6
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!