2017-01-12 9 views
0

libc.soとリンクしたい場合でも、私の質問は、いつも必要ですか? 私はインターネットを検索し、それが(矛盾)3つの可能な答えなぜ単純なcプログラムがlibc.aにリンクするので、libc.soにリンクしないのですか?

1. c program will require to link to libc.a and crt1.o files 
2. for "-l" option, ".so" is preferred against ".a" 
3. There're both libc.a and libc.so 

は、だから何私の質問に正解する必要がありますを与えますか?

+0

静的にリンクする場合は、静的ライブラリはもちろん必要です。 –

+1

これら3つの答えは、どこで手に入りましたか? –

+0

ダイナミックリンクのみの場合はどのようなコードでダイナミックリンクを行いますか? – stark

答えて

2

libc.aではなくlibc.soとリンクする場合は、特別な操作は必要ありません。これがデフォルトです。

最初の回答は古く、ほとんどの通常のLinuxディストリビューションには適用されません。デフォルトでは、Cプログラムはlibc.soを必要としますが、libc.aは必要としません。

2番目の回答は、デフォルトでは正しいです。この設定を変更するには、-staticのようなリンカーフラグを指定する必要があります。この答えは、libcだけでなく、すべてのライブラリに適用されることに注意してください。

第3の答えは、ほとんどのLinuxディストリビューションで正しいです。

GNU libc(大部分のLinuxディストリビューションに付属)の場合、実行可能ファイルをlibc.aに静的にリンクすることは推奨されず、機能しない可能性があります。実行可能ですが、実行していることを正確に把握し、いくつかのフープをジャンプする必要があります。そうしないと、実行可能ファイルはlibc.soに依存します。

他のバージョンのlibcは、より静的なリンクフレンドリである可能性があります。

関連する問題