web-dev-qa-db-ja.com

gcc 7.3への更新後のlibstdc ++。so.6からGLIBCXX_3.4.21およびCXXABI_1.3.9への更新

私はRHELサーバー(Maipo)を持っており、2018年1月25日リリースのインストールgcc 7.3(gcc 7.3.0)を実行しました。 gccをインストールするために、 CentOS 7.2にyumを使用してgcc 5.3をインストールする方法を教えてください

ただし、必要なソフトウェア(gcc> 4.9を必要とする)をインストールするときも、g ++ライブラリに問題があります。示されているようにgccをコンパイルすると、適切なライブラリが提供されるはずだと思いましたか?しかし、私は得ています:

/lib64/libstdc++.so.6: version CXXABI_1.3.9' not found 
/lib64/libstdc++.so.6: versionGLIBCXX_3.4.21' not found

それはまだ4.8.5バージョンのg ++​​にあります(libstdc ++。so.6.0.19-唯一のバージョンです)。チェックしましたが、1.3.9と3.4.21に到達しません。

RedHat(アカデミックサーバー)へのサブスクリプションが原因で、開発者ツールパックにアクセスできません。使用可能なものはgcc 4.8.5に戻ります。

誰かがこれを解決する方法についての考えを持っているなら、私は本当にあなたの助けに感謝します。そして、それが愚かに聞こえたら謝罪。

5
Leo

また、ソースからgcc 7.3をビルドしました。私のサンプルプログラム名はconsolehostです。

私は以下を行いました:

>ldd ./consolehost
./consolehost: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ./consolehost)
./consolehost: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./consolehost)
        linux-vdso.so.1 =>  (0x00007ffd79916000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8458cfc000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f84589f4000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f84586f1000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f84584db000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f8458118000)
        /lib64/ld-linux-x86-64.so.2 (0x0000556169234000)

それから私はそれを調査しました:

>ls -ALi /lib64/libstdc++.so.6
37631 lrwxrwxrwx. 1 root root 19 мар 17 06:38 /lib64/libstdc++.so.6 -> libstdc++.so.6.0.19

私は6.0.19よりも新しいバージョンが必要であることを理解しました。そう

>Sudo find / -name "libstdc++.so.6*"
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/local/lib64/libstdc++.so.6.0.24
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.24-gdb.py
/home/declspec/gcc_build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24
/home/declspec/gcc_build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/declspec/gcc_build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24
/home/declspec/gcc_build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/declspec/gcc_build/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24
/home/declspec/gcc_build/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

その瞬間、libstdc ++。so.6.0.24を/ lib64 /にコピーして、新しいシンボリックリンクを作成する必要があります。

Sudo mv /lib64/libstdc++.so.6 /lib64/libstdc++.so.6.orig
Sudo ln -s /lib64/libstdc++.so.6.0.24 /lib64/libstdc++.so.6

それは私を助けます。それもあなたに役立つことを願っています。 このリンク はGLIBCXXについて説明していますが、これがどのように機能するのか、何が目的であるのか理解していません(バージョンが十分でない理由)

3