3.24 リンカによる ARM 標準ライブラリの検索方法

リンカは、コマンドラインで指定されている情報を使用して、または環境変数を検査することで、ARM 標準ライブラリを検索します。

デフォルトでは、リンカは ARM 標準ライブラリを ../lib 内で検索します。この場所は armlink 実行可能ファイルの場所に対して相対的です。また、 --libpath コマンドラインオプションか、あるいは ARMLIB 環境変数または ARMCC5LIB 環境変数のいずれかを使用して、リンカによる ARM 標準ライブラリの検索方法を制御することもできます。

一部のライブラリはサブディレクトリに格納されます。コンパイラでは、特定のサブディレクトリのライブラリが必要な場合、サブディレクトリを識別するための特別なシンボルのインポートをリンカに追加します。サブディレクトリの名前は、Lib$$Request$$sub_dir_name 形式のシンボルを使用して、コンパイル済みの各オブジェクト内に配置されます。

--libpath コマンドラインオプションの使用

--libpath コマンドラインオプションは、親ディレクトリのコンマ区切りリストと共に使用します。このリストは、ARM のライブラリディレクトリ armlib および cpplib の親ディレクトリで終わる必要があります。

ライブラリパスの末尾に以下のパスの区切り文字を含めた場合、リンカでは、シンボル Lib$$Request$$sub_dir_name で指定されたサブディレクトリを検索します

  • \(Windows の場合)。

  • /(Red Hat Linux の場合)。

例えば、--libpath=mylibs\ とシンボル Lib$$Request$$armlib を使用した場合、リンカは以下のディレクトリを検索します。

mylibs mylibs\armlib

リンカコマンドラインオプション --libpath を使用した場合、ARMCC5LIB 変数で指定されたパスは検索されません。

複数のライブラリで同じシンボルが定義されている場合、検索は先頭から順番に実行されるため、リスト内で最初に出てくるライブラリがリンカによって選択されます。

ARMCC5LIB 環境変数または ARMLIB 環境変数

ARMLIB かまたは ARMCC5LIB 環境変数のいずれかを使用して、ライブラリのパスを指定することができます。

ライブラリパスの末尾に以下のパスの区切り文字を含めた場合、リンカでは、シンボル ARMCC5LIB に指定されたパスの末尾に以下のパスの区切り文字を含めた場合、リンカでは、シンボル Lib$$Request$$sub_dir_name で指定されたサブディレクトリを検索します。

  • \(Windows の場合)。

  • /(Red Hat Linux の場合)。

例えば、ARMCC5LIB install_directory\lib に設定されている場合、リンカでは以下のディレクトリを検索します。

lib lib\armlib lib\cpplib

ライブラリ検索順序

リンカはライブラリを次に示す順序で検索します。

  1. 現在のパスの相対パス

  2. コマンドラインオプション --libpath で指定された場所。

  3. ARMCC5LIB で指定された場所。

  4. ARMLIB で指定された場所

  5. ../lib で指定された場所。

リンカによる ARM ライブラリのバリアントの選択方法

ARM コンパイラツールチェーンには、さまざまなビルドオプションを使用してビルドされた、各ライブラリのバリアントがいくつか含まれています。例えば、アーキテクチャバージョン、エンディアン、命令セットがあります。ARM ライブラリのバリアントは、そのライブラリの名前で符号化されます。リンカは、ライブラリの検索時に識別された各ディレクトリから、最も適切なバリアントを選択する必要があります。

リンカは、各入力オブジェクトの属性を蓄積し、それらの属性に最も適したライブラリのバリアントを選択します。選択された複数のライブラリが同様に適している場合には、最初に選択されたライブラリが採用され、残りのライブラリは採用されません。

関連する概念
3.23 リンカによるライブラリの検索、選択、およびスキャンの実行方法
関連する参考文書
12.84 --libpath=pathlist
関連情報
C および C++ ライブラリの命名規則
C ライブラリと C++ ライブラリ
ツールチェーンの環境変数
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.