今回はEclipseベースの開発環境(SW4STM32、STM32CubeIDEなど)でリンカライブラリ(*.lib)ファイルや静的ライブラリ(*.a)ファイル等のライブラリを追加する方法について紹介します。
すべてのコードが公開されている場合はリンカライブラリ(*.lib)ファイルや静的ライブラリ(*.a)ファイル等を読み込む必要はありませんが、コードが公開されていない場合にメーカ等からリンカライブラリ(*.lib)ファイルや静的ライブラリ(*.a)ファイル等のみ提供される場合があります。このような場合にライブラリを追加してリンカ生成時にユーザー側のコード内の関数と結合させてバイナリファイルを生成します。
@ライブラリ配置
今回はプロジェクトフォルダの直下にライブラリファイルを置きます。
Aライブラリ追加設定
プロジェクトファイルのプロパティを開き(Alt+Enter)、「C/C++Build」の「Settings」、「Tool Settings」「MCU GCC Linker」内のLibrariesから追加します。
まず、「Library search path」の設定を下記のように設定し、プロジェクトフォルダ直下を見に行く設定にします。
"${workspace_loc:/${ProjName}}"
また、追加したライブラリを「Libraries」に追加します。ここでポイントは*.aファイルの場合はライブラリ名の前に「:」を追加する点して拡張子を合わせたフルネームで追加します。一方、*.libファイルの場合は「:」を除いて、ファイル名のみを追加します。
:***.a ←*.aファイルの場合
*** ←*.libファイルの場合
Bヘッダファイル追加
ライブラリファイル内の関数を定義しているヘッダファイルを必要に応じて追加します。プロジェクトフォルダ内のIncフォルダに追加します。
Cその他
ライブラリファイルが特定のArmコアに依存している場合、下記のようなビルドエラーが発生する場合があります。下記のエラーの場合はライブラリファイルがFPUなしのMPUをターゲットにしているため、FPU有のMPUでビルドしようとして発生するエラーです。このような場合はライブラリをFPU対応に書き換えることは難しいため、FPUなしとしてビルドします。
/bin/ld.exe: error: *.elf uses VFP register arguments *.o does not
/bin/ld.exe: failed to merge target specific data of file *.o
プロジェクトファイルのプロパティを開き(Alt+Enter)、「C/C++Build」の「Settings」、「MPU Settings」内の「Floating-point ABI」を「hard」から「soft」に切り替えます。
メーカからすべてのコードや情報が公開されている状態が理想的ですが、様々な制約で公開されていない場合はこのような方法で組み込むことができます。