私はMach-Oファイルに関する知識を最近学んでいます。私が怠惰なシンボル&ノン・レイジー・シンボルを学ぶとき、質問が来ます:誰が怠け者であるか非怠け者であるかを決定しますか?なぜ?私はそれがコンパイラであるかもしれないと思いシンボルを怠惰なものにするのはなぜですか?
は...
UPDATEん: 私は多分それは真実だ、私の質問についての答えを見つけました:結合
レイジーは、-zオプションによって制御され、リンカー、ld
。このオプションはキーワードを引数として取ります。キーワードは、(とりわけ)が挙げられる:
lazy
実行可能ファイルまたは共有ライブラリを生成する機能を(遅延結合)と呼ばれている時点まで関数呼び出しの解決を延期する動的リンカを伝えるためにそれをマークするのではなく、ロード時に
now
実行可能ファイルまたは共有ライブラリを作成すると、プログラムが開始されたとき、または共有ライブラリがdlopen()
を使用して、代わりのに関数呼び出しの解決を延期にリンクされている場合、すべてのシンボルを解決するために、ダイナミックリンカを伝えるために、それをマーク関数が最初に呼び出された時点
遅延バインディングがデフォルトです。 qcc
(推奨)を使用している場合は、-Wオプションを使用して-zオプションをldに渡します。たとえば、-Wl
,-zlazy
または-Wl
,-znow
と指定します。
参考:Optimizing the runtime linker
関連質問:あなたが理解何を持っているようDoes Clang/GCC really support a delay loading feature?