リンカ・ローダと実行形式
リンカでの弱いシンボル(weak symbol)の扱いとして正しいものはどれか。
- A弱いシンボルは、常にほかの定義より優先される
- B同じ名前の通常の(強い)定義があればそちらが使われ、なければ弱い定義が使われる
- C弱いシンボルを含むファイルは、リンクできない
答えと解説を見る
正解:B. 同じ名前の通常の(強い)定義があればそちらが使われ、なければ弱い定義が使われる
弱いシンボルは「ほかに定義がなければこれを使う」という予備の定義です。組込みのソフトウェアでは、割り込みハンドラの既定の処理を弱いシンボルで用意しておき、利用者が同じ名前の関数を書けば、それに差し替わるようにする使い方がよく見られます。強い定義どうしが重なると多重定義のエラーになりますが、弱い定義との重なりはエラーになりません。
- A. 逆に、強い定義に負けます。
- B. 正しい。初期値として差し替え可能な定義を用意できます。
- C. 普通にリンクできます。