linux 上的 SymbolicC++ 错误

SymbolicC++ error on linux

我正在尝试在 Ubuntu 15.10 上从 SymbolicC++3-3.35-ac.tar 安装 SymbolicC++。我做了 ./configure, make, sudo make install 没有错误。

我尝试用 g++ test1.cpp -lsymbolicc++ 编译以下内容:

#include <iostream>
#include "symbolicc++.h" 
using namespace std;

int main(void)
{
  Symbolic x("x");
  cout << integrate(x+1, x) <<endl;       // => 1/2*x^(2)+x
  Symbolic y("y");
  cout << df(y, x) << endl;               // => 0
  cout << df(y[x], x) << endl;            // => df(y[x],x)
  cout << df(exp(cos(y[x])), x) << endl ; 
                             // => -sin(y[x])*df(y[x],x)*e^cos(y[x])
  return 0;
}

此代码来自维基百科关于 SymbolicC++ 的文章

我收到以下错误:

doug@doug-Z170X-UD5:~/books_computerAlgebraSys$ g++ test1.cpp -lsymbolicc++
/usr/local/lib/libsymbolicc++.so: undefined reference to `Number<double>::Number(double const&)'
/usr/local/lib/libsymbolicc++.so: undefined reference to `Number<int>::Number(int const&)'
collect2: error: ld returned 1 exit status

尝试在 g++ 命令行中添加“-fno-elide-constructors”:

g++ test1.cpp -lsymbolicc++ -fno-elide-constructors

来自项目主页http://issc.uj.ac.za/symbolic/symbolic.html

Users of SymbolicC++ with GCC on 64-bit may need to use the -fno-elide-constructors flag.

Edit:但这似乎更适用于 header-only 版本的库(有两个版本,header-only 和 Autoconf 库版本).但我尝试了您的示例和 AC 库,对我来说,即使没有“-fno-elide-constructors”(Ubuntu 14.04 64 位,g++ 4.8.4),它也能正常构建和工作。

编辑 2:总而言之,出于某种原因,库 autoconf 版本似乎无法在每台机器上运行。对于header-only库,-fno-elide-constructors标志需要与64位一起使用,-I选项指向headers位置(解包库的位置) :

g++ test1.cpp -fno-elide-constructors -I<path_to_headers>