刺します。私はArduinoのコードを書いていませんが、CおよびC ++プログラミングの多くを行ってきました。私が実際にあなたのエラーを見た場合、それは助けになるでしょうが、それにもかかわらず。
CコードでC ++を使用するときに常に覚えておく必要がある主なことは、CコードをC ++コードにリンクできるようにするには、C ++コードに "extern" C ""で宣言された関数が必要であることです。「extern "C"」は、Cファイルにリンク可能なコードを作成している、またはCファイルのコードを使用していることをC ++コンパイラに通知するものです。したがって、ライブラリAPIヘッダー内のすべての関数は、「extern "C" void dosomething()」のように定義されたソースファイル内の関数と相関する必要があります。C ++でクラスを使用しようとしている場合は、Cコードでクラスを呼び出せないことに注意してください。オブジェクトにアクセスするには、関数(外部 "C")を作成する必要があります。CコードがC ++コンパイラでコンパイルされている場合は、「extern "C"」について心配する必要はありません。
C ++コード内でCコードを呼び出す場合は、次のような構成でCヘッダーをラップする必要があります。
#ifdef ___cplusplus
extern "C" {
#endif
///all my C function declarations... yada yada
#ifdef __cplusplus
} //end extern "C"
#endif
C ++で作業している場合は、「DEBUG」や「VERSION2」などのコンパイル時フラグを作成して特別なコードセットを作成する場合を除き、#definesをあまり使用しないでください。それ以外の場合は、安全な型チェックのための数値定義に「const int / char / float」を使用してください。コンパイラーは通常、これらを最適化するのに十分なほどスマートなので、ROM /コード空間に巻き込まれます(依存します)。また、マクロを作成せず、インライン関数を使用します。また、C ++で多数のマクロと数値定義を使用するなど、愚かである場合は、プログラミング時に常に規則に従う必要はありません。C99バージョンのCにも同じことが当てはまり、インライン関数やC ++のconstなどが追加されました。業界では、プリプロセッサ言語の使いすぎが原因で、バグが多くコードの保守が困難であることを認識しています。
Eclipseは通常、objファイルをプロジェクトの下のディレクトリに保存します。「デバッグ」ビルドを実行している場合は、プロジェクトフォルダーの下の「デバッグ」フォルダーの下にあります。「リリース」ビルドを実行している場合は、「リリース」などを確認します。通常、クリーンビルドはEclipseで動作するので、セットアップの何が問題なのかわかりません。プリコンパイル済みヘッダーを作成していないことを確認してください。