0

私はubuntu12.04マシンでc++プログラムをコンパイルし、それをRedHatLinuxサーバーで実行しようとしています。サーバーで実行すると、次のエラーが発生します。

/lib64/libc.so.6:バージョン`GLIBC_2.14'が見つかりません

libc.so.6ファイルを見つけ、同じディレクトリのlibc-2_12.soにリンクされていることを確認しました。libc-2_12.soファイルをlibc-2_14.soのようなファイルに置き換える必要があると思います。しかし、検索してみたところ、それを行う方法が見つからなかったし、それが可能かどうかさえわかりませんでした。この問題を修正する方法はありますか?

4

3 に答える 3

0

IMO、最良の方法は、RedHat用にプログラムを再コンパイルすることです。RHでは、そのファイルを置き換える唯一の方法はlibc全体を再コンパイルすることですが、RHでインストールされている他のすべてのソフトウェアが破壊されます。RHのパッケージシステムでは、異なるバージョンのlibcを切り替えることはできません。

于 2012-09-27T16:28:10.723 に答える
0

Red Hatクラスターのどこかに正しいライブラリがある場合(そうでない場合は有効なライブラリを取得します)、そのパスをLD_LIBRARY_PATH環境変数の前に追加するだけです(LD_RUN_PATHこれも可能です)。

于 2012-09-27T16:31:10.030 に答える
0

他の回答が言っているように、最良の方法はサーバー上でプログラムを再コンパイルすることです。もう1つの方法は、リンク時にGCCに渡すことによって-static(または、単一のコマンドでコンパイルする場合はプログラムをコンパイルするときに)、プログラムを静的にリンクすることです。

これにより、実行時にダイナミックリンカを使用するのではなく、すべての依存関係を取り込み、非常に大きなプログラムではありますが、単一のプログラムを作成する必要があります。ただし、うまくいかない可能性のあるさまざまな種類の動作があるため、奇妙な動作が発生したり、まったく役に立たなかったりする可能性があります。注意して使用してください

もちろん、これは両方のマシンが同じアーキテクチャである場合にのみ機能します。

于 2012-09-27T16:37:57.390 に答える