2017-10-17 10 views
0

私はプラットフォーム固有のライブラリ(libMyPlatform.a)にELFバイナリの特定のセクション(システム上のブートローダがこれらを解析する)にさまざまなシンボルを公開しています。このライブラリは、サードパーティ開発者が他のバイナリに静的にリンクしている可能性があります。スタティックライブラリ間で(未使用の)シンボルやセクションをどのように伝播するのですか?

リンキング段階でELFセクションが表示され、libMyPlatform.aの使用されていないシンボルはサードパーティのバイナリには伝播されません。おそらく、リンカが未使用時にそれらを破棄するためです。

libMyPlatform.aのシンボルを、生成された最終バイナリに表示させるにはどうすればよいですか?

+0

関連する? https://stackoverflow.com/q/29545191/1531971 – jdv

+0

@jdvのようなものですが、私の質問はもっと一般的なケースです。 https://stackoverflow.com/a/29545417/8791029は、実行可能ファイルにコンパイルする場合に効果的です。しかし、ライブラリにコンパイルして実行可能ファイルにリンクすると、シンボルはライブラリにありますが、バイナリには含まれません。私はそれがバイナリにも存在することを望みます。 –

答えて

0

ユーザーを制御できる場合LDFLAGS-Wl,--whole-archive -lyourlib Wl,--no-whole-archiveを追加できます。

あなたができない場合は、唯一の方法は、(例えばなど、常に使用されるコアAPIが含まれている)アプリケーションによってリンクされることが保証されたオブジェクト・ファイル内のすべての必要なシンボルに力を参照にある:

static __attribute__((used)) void *dummy[] = { 
    // Contents can be auto-generated 
    mysym1, 
    mysym2, 
    ... 
}; 

これはもちろん、まったく使用されていないダミーアレイの貴重なメモリを失わせることになります。

関連する問題