自分のマシンで C++ プログラムをコンパイルし、それを別のマシン (古いソフトウェアを使用) で実行すると、次のようになります/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
。
実際、私のシステムでは glibc の方が新しく (gcc-libs 4.5.1: libstdc++.so.6.0.14 を取得しました)、strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
から に出力さGLIBCXX_3.4
れGLIBCXX_3.4.14
ます。GLIBCXX_3.4.8
代わりに、他のシステムでは、 (libstdc++.so.6.0.8 を取得しました)までしか出力されません。
だから私はいくつかの質問があります:
GLIBCXX_3.4.9
リンカーが C++ バイナリをではなくlibstdc++ バージョンにリンクするのはなぜGLIBCXX_3.4.14
ですか?libstdc++ バージョンに対してバイナリをコンパイルした場合、
GLIBCXX_3.4
ほとんどどこでも実行されると思います。それは何らかの問題を意味しますか?(例: 古い、したがってより悪いアルゴリズムの実装を使用しますか?)代わりに、プログラムを libstdc++ に対して静的にリンクすると、どこでも実行されると思います。もちろん、バイナリははるかに大きくなります(〜1MB)。他に長所/短所はありますか?
リンカーに、特定のバージョンの libstdc++ に対してバイナリをリンクさせることはできますか?