2

私はubuntu12.04でcmakeを使用して大規模なC++プロジェクトを構築し、結果のバイナリパッケージを取得して、ubuntu11.04で実行しようとしています。ただし、プログラムはglibcバージョン2.14が必要であると言って失敗しますが、バージョン2.13までしか見つけることができません。glibc => 2.14が必要な理由を正確に知るにはどうすればよいですか?

4

2 に答える 2

3

ほとんどのライブラリとは異なり、glibcはそのシンボルをバージョン管理します。すべてのシンボルは、インターフェイスが最後に変更されたライブラリのバージョンを表す値(「GLIBC_2.3.4」など)でタグ付けされます。これにより、ライブラリに特定のシンボルの複数のバージョンを含めることができ、進化する機能を維持しながら、古いバージョンに対してコンパイルされたバイナリをサポートできます。この詳細は。で確認できますobjdump -T /lib/libc.so.6

基本的に、アプリ内の何かが11.04以降に変更されたシンボルに対してリンクされていました。バイナリを試しobjdump -Tて、探しているタグを確認してください。

しかし、大まかに言って、下位互換性はLinuxのようには機能しません。古いソフトウェアで何かを実行したい場合は、古いソフトウェアでビルドする必要があります。最近のディストリビューションで下位互換性のあるツールチェーンを設定することは可能ですが、これはデフォルトではありません。

于 2012-07-26T19:38:08.063 に答える
0

C ++プロジェクトをビルドすると、12.04インストールのglibcライブラリのバージョンにリンクされます。ビルドコマンドのリンカーオプションは何ですか?

何を構築しているのかを正確に知らなくても、11.04で構築してから、12.04で実行する方がよいと思います。

于 2012-07-26T07:13:35.083 に答える