glibc-2.13をダウンロードしてコンパイルした。 malloc()を実行するサンプルCプログラムを実行しようとすると、次のエラーが発生しますelf file OS ABI invalid
この問題を解決するのに役立つポインタを誰かに渡してもらえますか?私のカーネルバージョンはlinux-2.6.35.9であることに注意してください
問題はカーネルのバージョンではありません。
システムのローダーは、新しいLinux
ABIをサポートしていません。比較的最近まで、Linux ELFバイナリはSystem V
ABI。最近、STT_GNU_IFUNCをサポートするために、Linux
ABIが追加されました。 systemCライブラリを更新してSTT_GNU_IFUNCをサポートするローダーを用意する必要があります。そうすると、Linux
ABIタイプのELFオブジェクトも認識されます。
必要に応じて、STT_GNU_IFUNCが何を行うかについて理解するには、 SparcのSTT_GNU_IFUNCに関するDave Millerのブログエントリ(アーカイブ) を参照してください。
Glibcは、ifuncと新しいLINUX ABIを強制的に使用する--enable-multiarch
フラグで構築された可能性があります
新しいシステムからローダーに手を入れると、それを使用してローダーを機能させることができる場合があります。ただし、プログラムのどこにでもローダーを運ぶ必要があります。説明されているようにローダーを使用するようにプログラムをコンパイルすることができます here または、プログラムをコンパイルして、後で説明するのと同様の方法でpatchelfを使用してパッチを適用できます here 。他の場所からld-2.15.soをコピーすることにより、ld-2.5.soがインストールされているLinux 2.6.18(あなたのものより古い)でOS ABI invalid
エラーが発生するプログラムを実行できました。
注:システムld * .soまたはld-linuxを上書き[〜#〜]しない[〜#〜]で上書きしてください。 ;-/
私が言えることは、--enable-multiarch
がデフォルト設定であり、--enable-multiarch=no
を設定して無効にする必要があるということです。