2012-08-26 5 views
5

たとえば、アンドロイドはglibcではなくバイオニックを使用していますが、glibcではなく、これは実際にバイオニックhttp://en.wikipedia.org/wiki/Bionic_(software)を使用していますか?埋め込みシステムがglibcまたはbionicを使用しているかどうかを確認しますか?

私はこの情報を/ procファイルシステムで見つけることができますか、または現在のシステムでbionicが使用されていることを伝えるコマンドがありますか?

ところで、埋め込みシステムで複数のc libを持つことは可能ですか?

+1

各アプリケーションプログラムがそのlibcに静的にリンクされている場合、異なるアプリケーションによって異なるlibcs​​が使用されている可能性があります。 – sawdust

+0

アプリケーションを静的にそのCライブラリにリンクする方法は? – hugemeow

+2

gccの場合はリンク時に '-static'オプションを使います。実行可能ファイルが静的であるか動的にリンクされているかを知るには、ユーティリティ 'file'を使います。 'strings'を使って、動的にリンクされた実行可能ファイルによって使用されるライブラリとエントリポイントをリストします。 – sawdust

答えて

4

BionicまたはGlibcにリンクされているかどうかによって動作が異なる必要があるコードは、コンパイル時に決定する必要があります。 BionicとGlibcはバイナリ互換性がありませんので、コンパイル時に1組のヘッダーにコミットする必要があります。

#if __BIONIC__ 
/* Bionic-specific code */  
#elif __GLIBC__ 
/* Glibc-specific code */ 
#else 
#error "This C library is not supported" 
#endif 

/procはないCライブラリについては、カーネルに関する情報が含まれているため、あなたは/proc内の任意の情報を見つけることができません。

理論上、多くのCライブラリをシステムに自由に配置することができます。しかし、これらは一般的にコードサイズを小さくしようとするので、組み込みシステムでは非常に珍しいでしょう。デベロッパーがクロスコンパイルされていない場合(最初はまれです)、複数のCライブラリーが組み込み開発者のマシンにある唯一のシステムです。さらに、BionicはAndroid上でのみ使用され、AndroidではBionicのみが使​​用されるため、AndroidシステムにはBionicがあり、他のシステムにはBionicがありません。 Android以外のLinuxシステムには、Glibcまたは(組み込みシステムの)uClibcやDietlibcなどの他のlibcのライブラリがあります。

+0

システムがglibcまたはuClibcを使用しているかどうかを知る方法は? – hugemeow

+0

@hugemeow '#ifdef __UCLIBC__'。ほとんどの図書館にはこのようなものがあります。 – Gilles

+0

どのようなclibを使用しているかを知るためには、埋め込みシステムに含まれる可能性のあるヘッドファイルを読んでください。 – hugemeow

関連する問題