4

Ubuntu 12.04 で C プログラムをコンパイルし、そこから Debian パッケージをビルドしました。それを Debian Lenny を実行しているサーバーにインストールしたいと考えています。

前回 (約 2 か月前) 実行したときはうまくいきました。パッケージをインストールしてバイナリを実行することができました。しかし、今では次のエラーメッセージが表示されます:

(binary's name): /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by (binary's name))

マシンを Ubuntu 12.4 にアップグレードする以外に、コードに加えた唯一の重要な変更は、機能テスト マクロstrdup()を有効にする必要がある への呼び出しです。_POSIX_C_SOURCE=200809L

サーバーを最新の Debian バージョンにアップグレードすることは、私の直接の管理下にないため、私の好みのオプションではありません。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

8

ここでの重要な情報は、「マシンのアップグレード」だと思います。以前はこれが機能していたのですが、12.04 よりも前のものをビルドしてパッケージ化していたのですか? もしそうなら、問題は 12.04 が新しいバージョンの libc (どうやら 2.14) と共に出荷され、バイナリがそのバージョンの libc への依存関係を記録するようになったことです。古いバージョンの libc を使用している可能性が高い Lenny で実行しようとすると、リンカーは Lenny バージョンが 2.14 API をサポートしていないことを検出し、失敗します。

おそらく最善の方法は、12.04 で開発とテストを行い、特定の Debian リリース用のパッケージを作成する場合は、pbuilderなどを使用して deb を作成することだと思います。これにより、パッケージ ビルドに使用されるライブラリがターゲット プラットフォームと一致することが保証されます。

于 2012-05-31T15:16:38.707 に答える