ユーザーが一連の線形方程式に対して一連の記号操作を実行できるようにする単純なアプリケーションを作成しようとしており、この目的のために 「Symbolicc ++」ライブラリ(より具体的には最新バージョン 3.35) を使用しています。
私は C++ の経験が少なく、サードパーティのライブラリを実際に使用したことがないため、ライブラリの適切な使用方法を知らず、ばかげた間違いを犯している可能性があります。
問題は、ライブラリのメイン ヘッダーを含む複数のファイルで構成されるプログラムをコンパイル (およびリンク) しようとすると、多数の定義エラーが発生することです。エラーは、ライブラリのファイル(私のものではない)で定義されている関数とクラスを参照しています。
非常に単純な例: main.cpp、head.h、head.cppというファイルがあるとします。内容は次のとおりです。
main.cpp
------------------
#include <iostream>
#include "head.h"
int main()
{
return 0;
}
head.h
------------------
#ifndef SOMETHING
#define SOMETHING
#include "symbolicc++.h"
#endif
head.cpp
------------------
#include "head.h"
//nothing
もちろん、実際のプログラムのファイルにはさらに多くのファイルが含まれていますが、これだけでも、たとえば次のようにプログラムをビルドしようとしています。
g++ -I /path to library's header files/ main.cpp head.cpp
次のような何百ものエラーメッセージが表示されます。
/tmp/ccYNzlEF.o: In function `Cloning::Cloning()':
head.cpp:(.text+0x0): multiple definition of `Cloning::Cloning()'
/tmp/ccNWUnnC.o:main.cpp:(.text+0x0): first defined here
たとえば、Cloning::Cloning()は、ライブラリのヘッダー ファイルの 1 つであるcloning.hで宣言されています。
symbolicc++.hを含む1 つのファイルのみを含むプログラムは問題なく動作します。
また、このプロジェクトを Visual Studio 2012 でビルドしようとしましたが、同様の結果が得られました。
残念ながら、この問題に関する情報を見つけることができませんでした。事実上、見つかったすべての資料は、ユーザーが作成したヘッダー ファイルのエラーに関するものでした (他の誰かが作成したライブラリとは対照的に)。