リンカによる参照の解決方法

リンカは、ライブラリのリストを構成すると、参照を解決するためにリスト内の各ライブラリを繰り返しスキャンします。 保持されるファイルの 2 つの別々のリストがあります。 すべての依存関係を解決するために、その 2 つのリストは以下の順序でスキャンされます。

  1. ../lib にあるシステムライブラリ、あるいは --libpathARMCCnLIB、または ARMLIB によって指定されるディレクトリにあるシステムライブラリのリスト。 -Jdir[,dir,...] コンパイラオプションでも指定できます。

  2. ロードされたその他のすべてのファイルのリスト。 -Idir[,dir,...] コンパイラオプションでも指定できます。

各リストは、以下の手順でスキャンされます。

  1. 指定されたすべてのディレクトリを検索して、最も互換性のあるライブラリのバリアントを選択します。

  2. そのバリアントをライブラリのリストに追加します。

  3. 各ライブラリをスキャンして、必要なメンバをロードします。

    1. その時点で解決されていない非弱参照について、リスト内のライブラリを順に検索して、一致する定義を探します。 検出された最初の定義が手順 b のためにマークされます。

      複数のライブラリで同じシンボルが定義されている場合、検索は先頭から順番に実行されるため、リスト内で最初に出てくるライブラリがリンカよって選択されます。 このため、入力ファイルリストにライブラリを追加することにより、ARM C ライブラリなどの他のライブラリの関数定義をーバーライドできます。 ただし、ライブラリのメンバのすべてのシンボルを一貫してオーバーライドする際は注意して行って下さい。 そうしないと、オーバーライドされたシンボルへの参照とオーバーライドされなかったシンボルへの参照が存在する場合、ロードされる両方のライブラリオブジェクトに危険が及びます。 これによって、オーバーライドされたシンボルのそれぞれについて複数のシンボル定義エラー L6200E が発生しす。

    2. 手順 a でマークされたライブラリのメンバをロードします。 メンバをロードすると、弱参照を含む、未解決の参照が解決される可能性があります。 また、ライブラリメンバのロードによって、新たに未解決の弱参照および非弱参照が生じる可能性もあります。

    3. これらの手順の処理は、すべての非弱参照が解決されるか、どのライブラリでも解決できないことが判明するまで続けられます。

  4. スキャン処理が完了しても非弱参照が解決されない場合は、エラーメッセージが生成されます。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612