我正在尝试编写一个简单的应用程序,允许用户对一组线性方程执行一系列符号操作,并 为此目的使用“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()是在cloning.h中声明的,它是库的头文件之一。
只包含一个包含 symbolicc++.h 文件的程序可以正常工作。
我还尝试在 Visual Studio 2012 上构建这个项目并得到了类似的结果。
不幸的是,我无法找到有关此问题的任何信息,因为我发现的几乎所有材料都涉及用户创建的头文件中的错误(与其他人创建的库相反),因此我们将不胜感激。