それほど新しくない RHEL 5.6 で比較的新しいパッケージを実行する必要があります。
lib3rdparty.so
RHEL 5.6 には 2.5 しかインストールされていませんが、glibc 2.6 に対してコンパイルされたサードパーティ ライブラリ ( ) があります。しかし、ライブラリには への参照が 2、3 しかありませんsched_getcpu@@GLIBC_2.6
。こんな感じで調べました
readelf -s lib3rdparty.so | egrep "@GLIBC_2.[6-9]"
GLIBC_2.5
インストールされているものよりも新しいものへの参照を見つけるため。出力は
0 FUNC GLOBAL DEFAULT UND sched_getcpu@GLIBC_2.6 (62)
0 FUNC GLOBAL DEFAULT UND sched_getcpu@@GLIBC_2.6
したがって、 からの関数は 1 つだけGLIBC_2.6
です。今、ライブラリにこの機能があると思わせたいと思います。その目的のために、ここlibcheat.so
で述べたような小さなライブラリ () を作成しました。これで、を実行すると、次の文字列が表示されるファイルがあります。libcheat.so
readelf
10 FUNC GLOBAL DEFAULT 11 sched_getcpu@@GLIBC_2.6
このライブラリを使用して、動的にリンクされた実行可能ファイルを正常にビルドできましたlib3rdparty.so
。ld
このライブラリがなければ、への参照が見つからないため、何も構築できませんsched_getcpu
。
しかし、問題はこのファイルの実行にあります。実行しようとすると、次のエラーが発生します。
./hello_world: version `GLIBC_2.6' not found (required by ./lib3rdparty.so)
ですから、それを機能させるための最後のステップがあると思いますが、何をすべきかわかりません。私は使用/etc/ld.conf.preload
してエクスポートしようとしLD_LIBRARY_PATH
たので、他のライブラリより先にロードするライブラリを指すようになりました。しかし、それは実行されません。実行しようとしましstrace
たが、意味のある出力がありません。
何か案は?