2011-10-04 56 views
20

がダウンロードされ、コンパイルされましたglibc-2.13。 malloc()を実行するサンプルのCプログラムを実行しようとすると、私はそれが問題だカーネルのバージョンではありません elf file OS ABI invalidglibc:elfファイルOS ABIが無効

は誰でも自分のカーネルのバージョンは、Linux-2.6.35.9

+0

これは少し情報が不足しています。あなたはそのlibcとリンクし&実行していますか? – Mat

答えて

29

であることを、このissue.Pleaseノートを解決するには、私のすべてのポインタが参考に渡してくださいすることができ、エラー以下ます。

システムのローダーは、新しいLinux ABIをサポートしていません。比較的最近まで、Linux ELFバイナリはSystem V ABIを使用していました。最近、STT_GNU_IFUNCのサポートで、Linux ABIが追加されました。 システム Cライブラリを更新して、STT_GNU_IFUNCをサポートするローダーを持っていなければならず、Linux ABIタイプのELFオブジェクトも認識する必要があります。

あなたが気にしている場合、STT_GNU_IFUNCの機能を理解するためにDave Miller's blog entry on STT_GNU_IFUNC for Sparcを参照してください。

+1

ありがとうmkj。それは良い情報でした。私はちょうどld-linux.so(基本的にld-2.13.so)を置き換え、物事は私のために働き始めた。あなたが好奇心が強い場合に備えて、私の設定は、私がLinuxディスクレスのターゲットを作成して仮想ボックスで実行しているようなものです。この問題は、root-fsでlibc.so.6(glibc-2.9程度)をlibc.so.6(glibc-2.13)に置き換えたときに現れ始めました。以前のlibc.soのOS-ABIを比較しています。 6では、「システムV」を示しました。ここでは、新しいものには「Linux」があります。 – Kapil

+0

あ、私はあなたがローダーを置き換えずにシステムのCライブラリを置き換えたことを認識していませんでした、または私は私のアドバイスでより具体的でした。私はLD_LIBRARY_PATHを使って別のライブラリをロードするようなことをやっていると思っていました。喜んで助けて! – mkj

2

それはあなたのglibcが--enable-multiarchは、デフォルトの設定であり、あなたが--enable-multiarch=noを設定することで、それを無効にする必要があることは何か私が言うことができるから、ifuncと新しいLINUX ABI

1

を使用して強制的に--enable-multiarchフラグで構築された可能です。

0

新しいシステムからローダーを手に入れたら、それを使って動作させることができます。しかし、あなたのプログラムがどこに行くにしても、ローダーを運ぶ必要があります。プログラムをコンパイルして、hereのようにそのローダーを使用するか、またはプログラムをコンパイルして、patclhelfを使用して後でパッチすることができます。これは、hereと同様の方法で行います。私はld-2.5.soを持っていたLinux 2.6.18(あなたよりも古い)でエラーを出していたプログラムをld-2.15.soを別の場所からコピーして実行することができました。

注:を入力しないでください。は、システムのld * .soまたはld-linuxを上書きします。 ; -/

関連する問題