可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How can I get GLIBCXX_3.4.15 in Ubuntu? I can't run some programs that I'm compiling.
When I do:
strings /usr/lib/libstdc++.so.6 | grep GLIBC
I get:
GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBC_2.2.5 GLIBC_2.3 GLIBC_2.4 GLIBC_2.3.4 GLIBC_2.3.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH
Thanks for any help!
回答1:
I'm compiling gcc 4.6 from source, and apparently
sudo make install
didn't catch this one. I dug around and found
gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15
I copied it in to /usr/lib and redirected libstdc++.so.6 to point to the new one, and now everything works.
回答2:
I was trying to get clang to work (which also requires 6.0.15), and while poking around I found it was installed at /usr/local/lib/libstdc++.so.6.0.15. It installed there when I installed graphite (an experimental gcc version).
If you need access to libraries at that location, then you’ll need to define LD_LIBRARY_PATH as:
export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64
I was able to get clang to work after doing this. Hope that is helpful to someone.
回答3:
I have been avoiding this issue in the past by simply linking libstdc++ statically with this parameter sent to g++ when linking my executable:
-static-libstdc++
If linking in the library statically is an option this is probably the quickest work-around.
回答4:
I encounter this problem when trying to use matlab eng to call m functions from c code. which occurs with command mex -f .. ..
My solution:
strings /usr/lib/i386-/libstdc++.so.6 | grep GLIBC
I found it includes 3.4.15
so my system has the newest libs.
the problem comes from matlab itself, it calls its own libstdc++.so.6 from {MATLAB}/bin
so, just replace it with the updated system lib.
回答5:
For this error, I copied the latest libstdc++.so.6.0.17 from other server, and removed the soft link and recreated it.
1. Copy the the libstdc++.so.6.0.15 or latest from other server to the affected system.
In my case SUSE linux 11 SP3 had latest.
2. rm libstdc++.so.6
3. ln -s libstdc++.so.6.0.17 libstdc++.so.6 (under /usr/lib64 directory).
nJoy
回答6:
gcc version 4.8.1, the error seems like:
/root/bllvm/build/Release+Asserts/bin/llvm-tblgen: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /root/bllvm/build/Release+Asserts/bin/llvm-tblgen)
I found the libstdc++.so.6.0.18 at the place where I complied gcc 4.8.1
Then I do like this
cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/ rm /usr/lib64/libstdc++.so.6 ln -s libstdc++.so.6.0.18 libstdc++.so.6
problem solved.
回答7:
I have just faced with similar issue building LLVM 3.7 version. first check whether you have installed the required library on your system:
$locate libstdc++.so.6.*
Then add the found location to your $LD_LIBRARY_PATH environment variable.
回答8:
I got same error. This is how it worked for me:
- cleaned the project under currently installed gcc
- recompiled it
Worked perfectly!
回答9:
I've extracted them from an RPM (RPM for libstdc++) and then:
export LD_LIBRARY_PATH=.
To set the system to search for the libraries on the current directory. Then just executed my program. But in my case I've received a single executable that I needed, it wasn't a system wide change.
回答10:
Sometimes you don't control the target machine (e.g. your library needs to run on a locked-down enterprise system). In such a case you will need to recompile your code using the version of GCC that corresponds to their GLIBCXX version. In that case, you can do the following:
- Look up the latest version of GLIBCXX supported by the target machine:
strings /usr/lib/libstdc++.so.6 | grep GLIBC ... Say the version is 3.4.19. - Use https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html to find the corresponding GCC version. In our case, this is
[4.8.3, 4.9.0).
回答11:
I've had a similar issue, and I've resolved it by statically linking libstdc++ into the program I was compiling, like so:
$ LIBS=-lstdc++ ./configure ... etc.
instead of the usual
$ ./configure ... etc.
There might be problems with this solution to do with loading shared libraries at runtime, but I haven't looked into the issue deeply enough to comment.
回答12:
I had the same problem before, and fixed that, the steps could be found on this Fixing error "GLIBCXX_3.4.15" on matlab
回答13:
Bug with GLIBCXX_3.4.14 You need to install a newer version of GCC. http://pkgs.org/download/libstdc++.so.6 goto:
http://geeksterminal.com/how-to-install-glib-glibc/1392/
and follow instructions.
回答14:
I had the same problem because I changed the user from myself to someone else:
su
For some reason, after did the normal compiling I was not able to execute it (the same error message). Directly ssh to the other user account works.
回答15:
I had multiple versions of the gcc compiler installed and needed to use a more recent version than the default installation. Since I am not a system administrator for our Linux systems, I cannot just change /usr/lib or many of the other suggestions above. I was encountering this problem and eventually tracked it down to setting my path to the 32-bit library directory instead of the 64-bit library (lib64) directory. Since the libraries in the 32-bit directory were incompatible, the system defaulted to the older version which was out of date.
Using -L to the path I was referencing gave warnings about "skipping incompatible libstdc++.so when searching for -lstdc++". This was the hint that helped me finally resolve the problem.
回答16:
Same thing with gcc version 4.8.1 (GCC) and libstdc++.so.6.0.18. Had to copy it here /usr/lib/x86_64-linux-gnu on my ubuntu box.