2017-03-07 14 views
2

私は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?

答えて

2

が鳴ります。 なぜ部分については

:できるだけ遅く、物事を行う

は:(a)は、起動するために発生作業を削減し、その実行パスが取られることはありません場合(b)は完全にその作業を回避することができます。これはリンカだけでなく、必要になるまで延期することができる実行です。

関連する問題