Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ArduinoIDE環境で"multiple definition of ..."とか出ていたら、ライブラリを多重に読み込んでいる可能性

Arduino用スケッチにて"multiple definition of ..."とか出ていたら……ライブラリを多重に読み込んでいる可能性があります。
お手製ライブラリを組み込んだアプリを受け取った際に起こりがちです。
依存関係を消して、再度ライブラリを導入すると何とか成るかも。

実際のところ

上記の事がおこると、こんなエラーがでてきます。

/Users/shuzo_kino/Documents/Arduino/libraries/hoge/fuga:26: multiple definition of fuga::piyo(int)'

もしかすると、こんなエラーも同時に出てるかも

sketch/fuga.cpp.o:sketch/fuga.cpp:51: first defined here

これは自前ライブラリが競合をおこしてる事が原因と考えられます。
特に、以下のように同一ディレクトリ階層にライブラリの本体が存在した状態で
zip形式のライブラリを読んでしまうと発生してしまう様子。

$ ls 
main.ino
fuga.cpp
fuga.h
...

対策としては、一旦ZIPを抹殺した後、同階層の各ファイルも削除、その状態でZIP形式ライブラリを再読込……とするとうまくいくようです。

追記:M5stack に関して

M5stackの場合、ブッキングしていると言っておきながらカッコの閉じ忘れやタイポを直したらコンパイラが黙ることがありました。
ライブラリ解決順の問題なのかも。
であれば、他のeps32系も同様の問題をもってるかもしれません。
shuzo-kino.hateblo.jp