19

私のプログラムは に依存していますlibcurl.so.3が、RHEL6 にはシンボリック リンクがありませんlibcurl.so.3 ⇾ libcurl.so.4(このリンクを作成すると、私のプログラムはスムーズに実行できます)。ただし、シンボリックリンクがありlibcurl.so ⇾ libcurl.so.4ます。

シンボリック リンクを作成せずに RHEL 6 でプログラムを実行できるように、SONAME埋め込みlibcurl.so.3.0.0.0ファイルをlibcurl.so.3toに変更したいと考えています。libcurl.so

私の解決策は最適ではありませんでしたが、バイナリを直接変更する方法を学ぶことは価値があると思います。

$readelf -d libcurl.so.3.0.0 

Dynamic segment at offset 0x303cc contains 25 entries:

  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libssl.so.2]
 0x0000000e (SONAME)                     Library soname: [libcurl.so.3]

libcurl.so.3上記をに変更したいと思いlibcurl.soます。

4

2 に答える 2

1

たとえば、アプリケーションが特定の libc (libc.so.6) に依存している場合などに、SO オブジェクトのバージョンを削除しないようにする必要があります。

別のライブラリを使用する場合の適切な方法は、アプリケーションを呼び出す前に LD_PRELOAD 変数を使用することです

LD_PRELOAD を新しいファイルのパスに設定すると、そのファイルは他のどのライブラリよりも先にロードされます (C ランタイム libc.so を含む)。

于 2014-11-06T19:09:25.590 に答える