友達、私はa.cとb.cの2つのファイルを持っています。 b.cから呼び出されているa.cに関数fooを定義しました。私が理解からリンク時または実行時に参照を解決するには?
、コンパイラがBCをコンパイルしようとすると、それはOSがリンクで解決すべきシンボルテーブル内のfooのエントリを追加しますので、それは、foo
の実装はBではないことがわかります時間。私はこの概念を正しく理解していました。
今、私はglibcに実装されているb.cのprintfとは別の関数printfを持っています。私が理解するところでは、printfはロード時または実行時にリンクすることができます。実行時にprintfがリンクされる場合は、システムコールを使用して実行時に解決されるprintfへの呼び出しごとにスタブが必要です。
私の質問は「コンパイラが関数fooがリンカによって解決され、実行時ではないと判断する方法は?」
私はいくつかの同様の質問に気付きましたが、ここでその重要性を理解できませんでしたか?