”Arduinoでライブラリの影響でビルドエラーが発生したり挙動がおかしい時の対処”という記事からそっくり拝借ています。
- 同じヘッダーファイル名を持つ複数のライブラリがインストールされている(想定と違うライブラリが使われている)。
- あるスケッチ(またはライブラリ)を使いたいが、同じ名前のライブラリが既にインストールされている。そのライブラリは触りたくない。
ときに、特定固有のライブラリを使う方法になります。
対応策としては(これをスケッチで使うには)、
- ソースファイルをスケッチと同じフォルダーに入れる。
- スケッチのフォルダにsrcフォルダーを作成し、ライブラリフォルダーごとコピー。
といったふたつの方法があります。
1.ソースファイルをスケッチと同じフォルダーに入れる。
ソースファイルはヘッダファイルとcppファイル構成が多いので、これらのファイルをinoファイルと同じフォルダーにコピーしてしまう。ライブラリのインクルードは通常の様に記述する。<>で囲むとビルド時 ドキュメント/Arduino/libraries やボードパッケージのライブラリフォルダー内を探しに行くため、スケッチと同じフォルダーにファイルを置いても見つからずエラーとなる。
1#include <RTClib.h>
スケッチと同じフォルダーにあるファイルを参照するには、
の様にincludeをダブルクオテーションで記述する。
123456789#include "RTClib.h"
RTC_Millis rtc;
void
setup() {
rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
}
void
loop() {
}
2.スケッチのフォルダにsrcフォルダーを作成し、ライブラリフォルダーごとコピーする。
フォルダーごとライブラリをスケッチのフォルダーにコピーしたい場合には、src サブフォルダーを作成し、その下に ライブラリのフォルダーをコピーする。src フォルダー以外に置いた場合ビルド時エラーとなる(srcフォルダーのみ特殊扱いとなっている)。そしてincludeを下記の様に記述する。
123456789#include "src/RTClib/RTClib.h"
RTC_Millis rtc;
void
setup() {
rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
}
void
loop() {
}
- 「<>」でくくるとコンパイラーに環境変数などで設定されたパスから探す
- 「””」でくくるとカレントディレクトリを探して、無ければコンパイラーに環境変数などで設定されたパスから探す
より詳細な説明は、下記