私が見る限り(grep '#include .*\.c'
)、彼らはdoublefann.c、fixedfann.c、floatfann.cでのみこれを行い、毎回理由が含まれています:
/* Easy way to allow for build of multiple binaries */
単純なコピー貼り付けのためのプリプロセッサのこの正確な使用は、実際、実装(* .c)ファイルを含める唯一の有効な使用法であり、比較的まれです。(別の理由でコードを含める場合は、*。hや* .incなどの別の名前を付けてください。)別の方法は、コンパイラーに指定されたマクロで構成を指定することです(たとえば、-DFANN_DOUBLE、-DFANN_FIXED、または-DFANN_FLOAT)、ただし、このメソッドは使用しませんでした。(それぞれのアプローチには欠点があるので、必ずしも間違っているとは限りません。それを判断するには、そのプロジェクトを詳しく調べる必要があります。)
それらは、doublefann.o(doublefann.cから)をfann.o(fann.cから)またはfixedfann.o(fixedfann.cから)などとリンクしてはならないmakefileおよびMSVSプロジェクトを提供し、それらのファイルは失敗したか、同様の問題が発生しました。
プロジェクトを最初から作成して(または既存のプロジェクトを使用して)、すべてのファイルをプロジェクトに追加しようとしましたか?そうした場合、起こっているのは、各実装ファイルが独立してコンパイルされており、結果のオブジェクトファイルに競合する定義が含まれていることです。これは実装ファイルを処理するための標準的な方法であり、多くのツールがそれを前提としています。考えられる唯一の解決策は、プロジェクト設定を修正して、これらをリンクしないようにすることです。(さて、あなたもそれらのソースを大幅に変更することができますが、それは実際には解決策ではありません。)
その間、プロジェクト設定を使用せずに続行すると、fann.cなどのコンパイルをスキップできる可能性があります。al。そして、おそらくプロジェクトからそれらを削除するだけで十分です–そうすると、それらはコンパイルおよびリンクされません。使用するdouble-/fixed-/ floatfannのいずれかを正確に選択する必要があります。そうしないと、同じリンクエラーが発生します。(私は彼らの指示を見ていませんが、この要約がもう少し詳細に説明されているのを見て驚くことはありません。)