linuxsymlinkcentos6syntaxnet

Creating Symbolic link fails


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)

Solution

  • 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.