私はubuntu12.04でcmakeを使用して大規模なC++プロジェクトを構築し、結果のバイナリパッケージを取得して、ubuntu11.04で実行しようとしています。ただし、プログラムはglibcバージョン2.14が必要であると言って失敗しますが、バージョン2.13までしか見つけることができません。glibc => 2.14が必要な理由を正確に知るにはどうすればよいですか?
2 に答える
ほとんどのライブラリとは異なり、glibcはそのシンボルをバージョン管理します。すべてのシンボルは、インターフェイスが最後に変更されたライブラリのバージョンを表す値(「GLIBC_2.3.4」など)でタグ付けされます。これにより、ライブラリに特定のシンボルの複数のバージョンを含めることができ、進化する機能を維持しながら、古いバージョンに対してコンパイルされたバイナリをサポートできます。この詳細は。で確認できますobjdump -T /lib/libc.so.6
。
基本的に、アプリ内の何かが11.04以降に変更されたシンボルに対してリンクされていました。バイナリを試しobjdump -T
て、探しているタグを確認してください。
しかし、大まかに言って、下位互換性はLinuxのようには機能しません。古いソフトウェアで何かを実行したい場合は、古いソフトウェアでビルドする必要があります。最近のディストリビューションで下位互換性のあるツールチェーンを設定することは可能ですが、これはデフォルトではありません。
C ++プロジェクトをビルドすると、12.04インストールのglibcライブラリのバージョンにリンクされます。ビルドコマンドのリンカーオプションは何ですか?
何を構築しているのかを正確に知らなくても、11.04で構築してから、12.04で実行する方がよいと思います。