2016-04-16 8 views
1

mylibmycodeのすべてが含まれていますが-Dmyflagなしでコンパイルされた場合、我々は2回(ソースファイルとライブラリで)提供されるコードはどのように扱われますか?

gcc -Dmyflag -lmylib mycode.c 

を呼び出すとします。したがって、mycodeに実装されているすべての関数およびその他のエンティティは、2つのバージョンでローダに使用できます。経験的には、私はmycodeからのバージョンが取得されていることがわかります。私はそれに頼ることができますか? mycodeは常にmylibを上書きしますか?

答えて

1

経験的には、mycodeのバージョンが使用されています。

、リンカーは、アーカイブライブラリをどのように動作するかの読み取り this explanation

、そしておそらくthis one

私はそれに頼ることができますか?

これはどのように動作するか理解しておく必要があります。

あなたは、参照リンクに材料を理解している場合は、libmylib.amainを追加すると答えが反転します(とmycode.cmainが含まれている場合、重複したシンボル定義のエラーが発生します)ことを確認します。

あなたは動的ライブラリlibmylib.soを使用している場合は、ルールが異なっており、多くのそのようなLD_PRELOADなどの合併症、-Bsymbolicとライブラリをリンクし、他の人がありますが、ライブラリは常に、メインバイナリに失うことになります。

簡潔に言えば、ではなく、とすることをお勧めします。

関連する問題