2

組み込み Linux カーネルを実行する ARM 組み込みシステム (ARM9) を使用しています。カーネルは、eglibc を使用して GCC 4.5.x でコンパイルされました。glibcを使用するGCC 4.8.x以降でコンパイルされたコードであるバイナリを実行しても害はありますか?

安定性の理由から、libc を組み合わせて使用​​することは想定されていないことを読みました。しかし、私が理解している限り、どちらも ABI と互換性があるため、問題はないはずです。

私が使用しているコードの一部は、STD11 を正しくコンパイルする必要があるため、GCC4.5 を使用できません。

4

1 に答える 1

1

カーネルは、eglibc を使用して GCC 4.5.x でコンパイルされました。

カーネルのビルドは GLIBC を使用しないため、カーネルのビルドに使用された (使用されなかった) libc はまったく関係ありません。

glibcを使用するGCC 4.8.x以降でコンパイルされたコードであるバイナリを実行しても害はありますか?

いいえ。

バイナリが libc に対してリンクするとどうなりますか? クロス コンパイル時に glibc に対してリンクされていましたが、sysroot の eglibc に対してリンクされます。

一般に、GLIBC と EGLIBC は下位互換性を保証します。つまり、GLIBC-xy に対してリンクされたバイナリは、xy よりも古い GLIBC に対して正常に動作します。

また、GLIBC からの EGLIBC の偏差はごくわずかです。EGLIBC では、特定の機能を無効にすることができました。EGLIBC-xy に対してリンクされたバイナリは、実行時に xy より古くない GLIBC が見つかった場合に問題なく実行されます (GLIBC には、バイナリが使用しない機能があります ( EGLIBCが実際にいくつかの機能を無効にした場合))。バイナリがすべてのGLIBC インターフェイスを使用することはめったにありません。

于 2016-12-07T03:36:30.320 に答える