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

リンカは、ライブラリのリストを構成すると、参照を解決するためにリスト内の各ライブラリを繰り返しスキャンします。

armlink は 2 つの別々のファイルのリストを保持します。すべての依存関係を解決するために、その 2 つのリストは以下の順序でスキャンされます。

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

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

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

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

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

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

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

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

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

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

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

関連する概念
3.22 弱参照と定義
3.23 リンカによるライブラリの検索、選択、およびスキャンの実行方法
3.24 リンカによる ARM 標準ライブラリの検索方法
関連する作業
3.25 リンク時のユーザライブラリの指定
関連する参考文書
12.84 --libpath=pathlist
関連情報
ツールチェーンの環境変数
-Idir[,dir,...] コンパイラオプション
-Jdir[,dir,...] コンパイラオプション
armlink のエラーおよび警告メッセージのリスト
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.