GCC ABI Policy and Guidelines ページによると、彼らは前方互換性を維持しようとしていることがわかりましたが、これがどの程度真実なのか、それとも何かが欠けているのか疑問に思います。
現在、libstdc++ 6.0.19 を搭載した CentOS 7 で gcc 4.1.2 / libstdc++ 6.0.8 を使用して Red Hat 5 でビルドされた C++ ソフトウェアを実行しようとしています。
ランダムなクラッシュ (しばらくは機能し、その後 30 分間体系的にクラッシュし、その後再び機能する可能性があります) や、サーバーの 64 GB をすべて使用するためにメモリが急増する (この問題はこれまで見たことがない) などの奇妙な動作が発生しています。
libgcc と libstdc++ を静的にリンクすることで、動作不良のプログラムの 1 つに関する問題を修正したようです。クラッシュすることなく数時間が経過しました。私は LD_LIBRARY_PATH で遊んで、ライブラリを実行可能ファイルとともに出荷することを考えています。
しかし、システム全体に同じ種類のソリューションを適用するにはかなりの時間がかかるため、誰かが私が正しい方向に進んでいるかどうか教えていただければ幸いです.
- 編集 -
言及するのを忘れていましたが、libstdc++ に静的にリンクされているライブラリもあれば、動的にリンクされているライブラリもあるため、次のような状況があります。
program_a -(dyn link)-> libstdc++
|-(dyn link)-> lib_b -(static link)-> libstdc++
|-(dyn link)----> lib_c -(dyn link)-> libstdc++
したがって、ここでは、1 つの libstdc++ がシステムのものであり、もう 1 つがコンパイラのものです。