Creating Symbolic link fails

kskp picture kskp · Jun 13, 2016 · Viewed 28.3k times · Source

I am trying to upgrade glibcxx on my CentOS 6.7 machine. I did the steps as given here.

Now, when I do:

strings /opt/google/chrome/lib/libstdc++.so.6 | grep GLIBC

I have GLIBCXX_3.4 to GLIBCXX_3.4.22 listed.

To use this file in my Syantaxnet build, I created a symbolic link:

ln -s /opt/google/chrome/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6

But I get an error:

ln: creating symbolic link `/usr/lib64/libstdc++.so.6': File exists

EDIT1:

I thought the error was because of the same file names and renamed /opt/google/chrome/lib/libstdc++.so.6 to libstdc++.so.6_new. The command still fails.

Can someone help me figure this out? Also, is this a solution for the error:

/usr/local/bin/bazel: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/local/bin/bazel)
/usr/local/bin/bazel: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/local/bin/bazel)

Answer

Employed Russian picture Employed Russian · Jun 16, 2016

I thought the error was because of the same file names

The error is telling you that /usr/lib64/libstdc++.so.6 already exists.

If you want to replace it, do this:

ln -sf /opt/google/chrome/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6

or this:

rm -f /usr/lib64/libstdc++.so.6
ln -s /opt/google/chrome/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6

and renamed /opt/google/chrome/lib/libstdc++.so.6 to libstdc++.so.6_new

That was exactly the wrong thing to do. You should try to understand what the error is telling you before you try to fix it.

I copied the contents of the /opt/google/chrome/lib/libstdc++.so.6 file into /usr/lib64/libstdc++.so.6 and got it working.

This has a disadvantage: if /opt/google/chrome/lib/libstdc++.so.6 is updated, the copy in /usr/lib64 will not. You should probably do the ln -sf above instead.