13,230
回編集
| 121行目: | 121行目: | ||
<br> | <br> | ||
その1つが、ld-linux.so.2ライブラリであり、libc.so.6ライブラリと一致しなければ、エラーが発生する。<br> | その1つが、ld-linux.so.2ライブラリであり、libc.so.6ライブラリと一致しなければ、エラーが発生する。<br> | ||
ld-linux.so. | ld-linux.so.2ライブラリへの絶対パスは、リンク時に実行ファイルにハードコードされており、リンク後は簡単に変更できない。 | ||
([http://nixos.org/patchelf.html patchelf]を使用することで可能である)<br> | |||
<br> | <br> | ||
新しくインストールしたGLIBCで動作するソフトウェアを使用する場合、以下のようにビルドする。<br> | 新しくインストールしたGLIBCで動作するソフトウェアを使用する場合、以下のようにビルドする。<br> | ||
./configure --prefix=<インストールするソフトウェアのディレクトリ> \ | ./configure --prefix=<インストールするソフトウェアのディレクトリ> \ | ||
LDFLAGS="-Wl,-rpath <GLIBCのインストールディレクトリ> -Wl,-dynamic-linker=<GLIBCのインストールディレクトリ>/lib64/ld-linux.so.2" | LDFLAGS="-Wl,-rpath <GLIBCのインストールディレクトリ>/lib64 -Wl,--dynamic-linker=<GLIBCのインストールディレクトリ>/lib64/ld-linux.so.2" | ||
<br> | <br> | ||
リンカオプションの<code>rpath</code>オプションは、ランタイムローダがGLIBCのインストールディレクトリにあるライブラリを検索する設定である。<br> | |||
<code>dynamic-linker</code>オプションは、ld-linux.so.2へのパスをソフトウェアに焼き付ける設定である。<br> | |||
(<code>dynamic-linker</code>オプションは、ELF実行ファイル用にコンパイルする場合にのみ動作する)<br> | |||
<br> | <br> | ||
ソフトウェアを再リンクする場合、以下の方法がある。<br> | ソフトウェアを再リンクする場合、以下の方法がある。<br> | ||
* 適切なchroot環境を設定する。 | * 適切なchroot環境を設定する。 | ||
* | * [http://bitwagon.com/rtldi/rtldi.html rtldi]とバイナリエディタを使用する。 | ||
* | * [http://nixos.org/patchelf.html patchelf]を使用する。<br>既にビルドされたELFのパスとインタプリタを変更することができる。 | ||
* 新しいld-linux.so.2を直接実行して、パラメータとしてソフトウェアのパスを渡す。<br>ソフトウェアを再ビルドすることなく、ld.-linux.so.2を置き換えることができる。 | |||
*: <code>/<GLIBCのインストールディレクトリ>/lib64/ld-linux.so.2 \</code> | |||
*: <code>--library-path <GLIBCのインストールディレクトリ>/lib64:/<GLIBCのインストールディレクトリ>/usr/lib64 \</code> | |||
*: <code>/<ソフトウェアのインストールディレクトリ>/<ソフトウェアの実行ファイル></code> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] | [[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] | ||