2017-11-07 52 views
0

[状況]GLIBCXX(libstdC++。so.6)とgccバージョンの関係

私はC++ライブラリを開発中です。私はGLIBCXXバージョンに問題がありました。

以前は、バージョンマシンGLIBCXX_3.4.22で開発しました。

しかし私のライブラリは、GLIBCXX_3.4.19を持つターゲットマシンでは動作していません。

したがって、gccバージョンを5.2.xから4.8.xに、GLIBCXXバージョンを3.4.22から3.4.19にダウングレードしました。

ターゲットマシンで正常に実行されました。

しかし、私の開発マシン(ubuntu)のブートは、他のライブラリが既にそのバージョンにリンクされているGLIBCXX 3.4.22のバージョンを見つけることができないので失敗します。

私はGLIBCXX 3.4.22を再インストールしましたが、gccのバージョンはまだ4.8.5です。

[質問]

  1. マイライブラリはGLIBCXX_3.4.22バージョンを使用していないGCC-4.8.5でコンパイルしていますか?この環境(gcc 4.8.5、GLIBCXX_3.4.22)で開発するのはいいですか?

  2. Linuxマシン上のgcc(コンパイル)バージョンとGLIBCXX(GLIBC)バージョンの関係は何ですか?

  3. ここで、gccとGLIBCXX(GLIBC)の間の正しいバージョン互換性マッピング情報を確認できますか?

答えて

3

(GLIBCXX_ *バージョンシンボルからである場合である)にlibstdC++は今までGCC 3.4.0からABI互換性がありました。

  1. ライブラリは、コンパイル時にlibstdC++の最新のシンボルバージョンを使用します。

  2. libstdC++で "dual ABI"をサポートするGCC 5.1が追加されました。 C++ 11モードでコンパイルされたコードは[abi:cxx11]タグのシンボルを使用し、C++ 11を使用しないでコンパイルされたコード(C++ 11サポートのない古いコンパイラか、より古い標準)。

  3. https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

あなたは古いシステム上で実行バイナリをビルドする必要がある場合は、私はすべての古いライブラリと、そこにあるコンテナや建物内の古いディストリビューションを設定することをお勧めします。このようにして、あなたの開発システムから新しいものが漏れることはありません。

+0

ありがとうございました。私はgccのコンパイルについては分かりませんでした。 gccとglibcの両方のバージョンをダウングレードする必要があります。 –

+0

@ YoonungLee:複数のgccバージョンを同時にインストールできるので、システムライブラリをダウングレードする必要はありません。 「仮想」システムに対してもコンパイルできます。 gccは正しいlibを見つけるために、与えられたシステムディレクトリを調べます。 – Klaus

+0

@Klaus私はgccを動的に変更できます。しかし、gccはコンパイル時に現在のlibversion上でGLIBCライブラリを参照していますか?たとえば、gccバージョン4.8をシステムglibcxx3.4でビルドすると、次のようになります。22の結果birnaryは、システムlibバージョンglibcxx3.4.19で実行することはできません。そうですか?私はシステムlibが他のプログラムによって参照されるので、開発環境でシステムlibを動的に変更しないようにする問題があります。 –

関連する問題