弱いリンクはどの程度移植可能ですか? #pragma weak my_symbol
-
05-07-2019 - |
質問
弱いリンクはどの程度移植性がありますか?
#pragma weak my_symbol
その質問が表示されます: how-to-make-weak- linked-work-with-gcc では、それを機能させる方法について説明しています。しかし、gccが不要になるようにこれを行う良い方法はありますか?
ウィークリンクと#ifdefによる宣言の保護の違いは何ですか?
#ifndef my_weak_fn
void my_weak_fn(){/* Do nothing */ return;}
#endif
解決
#pragma
は、定義により、ポータブルではありません。
そして、弱いリンクはリンク時に行われます(驚くほど十分です)。同じシグネチャを持つ関数(または実際には任意のシンボル)が別のシグネチャをオーバーライドできます。つまり、弱いものよりも強いものが優先的に選択されますが、強いものがない場合は弱いものが使用されます。
インクルードガードは、リンカーではなくコンパイラによって実行されます。強力なガードがない場合、弱いガードへのフォールバックを許可しません 。両方の関数のソースを制御する場合(一方を ifdef
-ingで、他方を ifndef
-ingで)同じ動作をシミュレートできますが、常にそうであるとは限りません。これは、2つの強力な機能から選択することです。
弱いリンクを使用すると、デバッグを目的として独自の malloc()/ free()
をドロップインするなど、それらを提供するライブラリとリンクすることができます。
所属していません StackOverflow