8

Linux システム (Fedora 9) の標準共有ライブラリはすべて、OSABI として ELFOSABI_NONE (0) を指定しています。

これは問題ありませんが、ELF ヘッダーで指定された OSABI が ELFOSABI_LINUX (3) である共有ライブラリをサプライヤから受け取りました。

これは、Linux システム用の共有ライブラリとしては不合理な値ではないように思えますが、私の他のすべてのライブラリとは異なる値です。私の他のライブラリの場合、これは「ELFファイルOS ABIが無効です」というエラーで失敗します。

FreeBSD ユーティリティbrandelf.cをコンパイルし、それを使用して OSABI タイプを 0 に変更したところ、ライブラリは他のすべてのもので正常に動作するようになりました。

私はただ疑問に思っています - なぜこのライブラリは ELFOSABI_LINUX としてマークされていると思いますか? おそらく、彼らは別のシステムでクロスコンパイルし、gcc フラグを指定して、この値を ELF ヘッダーに設定したのではないでしょうか? 同様のことを達成しようとしましたが、適切な gcc フラグを特定できませんでした。

この特定のサプライヤは多くの手を差し伸べないと何もしないので、考えられる原因を知りたいです。「あなたはおそらく X を行っていますが、これはあなたのライブラリを変更する必要があることを意味します。それらの配達を受け取った後」。

4

1 に答える 1

4

おそらく、ベンダーは FreeBSD でクロス コンパイルを行っているか、ごく最近の Fedora システムを使用しており、STT_GNU_IFUNC を使用するものはすべて ELFOSABI_LINUX としてマークされます。Linux で使用しようとしている場合は、ELFOSABI_NONE に変更しても問題はありません。

于 2010-01-07T15:32:39.883 に答える