web-dev-qa-db-ja.com

glibc:elfファイルOS ABIが無効

glibc-2.13をダウンロードしてコンパイルした。 malloc()を実行するサンプルCプログラムを実行しようとすると、次のエラーが発生しますelf file OS ABI invalid

この問題を解決するのに役立つポインタを誰かに渡してもらえますか?私のカーネルバージョンはlinux-2.6.35.9であることに注意してください

21
Kapil

問題はカーネルのバージョンではありません。

システムのローダーは、新しい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のブログエントリ(アーカイブ) を参照してください。

32
mkj

Glibcは、ifuncと新しいLINUX ABIを強制的に使用する--enable-multiarchフラグで構築された可能性があります

3
cyberzx

新しいシステムからローダーに手を入れると、それを使用してローダーを機能させることができる場合があります。ただし、プログラムのどこにでもローダーを運ぶ必要があります。説明されているようにローダーを使用するようにプログラムをコンパイルすることができます here または、プログラムをコンパイルして、後で説明するのと同様の方法でpatchelfを使用してパッチを適用できます here 。他の場所からld-2.15.soをコピーすることにより、ld-2.5.soがインストールされているLinux 2.6.18(あなたのものより古い)でOS ABI invalidエラーが発生するプログラムを実行できました。

注:システムld * .soまたはld-linuxを上書き[〜#〜]しない[〜#〜]で上書きしてください。 ;-/

3
msb

私が言えることは、--enable-multiarchがデフォルト設定であり、--enable-multiarch=noを設定して無効にする必要があるということです。

1
Oliver R.