1

我正在尝试在 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
4

1 回答 1

2

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

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

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

使用 64 位 GCC 的 SymbolicC++ 用户可能需要使用 -fno-elide-constructors 标志。

编辑:但这似乎更多地适用于库的仅标头版本(有两个版本,仅标头和 Autoconf 库版本)。但是我尝试了您的示例和 AC 库,对我来说,即使没有“-fno-elide-constructors”(Ubuntu 14.04 64 位,g++ 4.8.4),它也可以构建并正常工作。

编辑 2:总而言之,由于某种原因,库 autoconf 版本似乎不适用于每台机器。对于仅标头库,该-fno-elide-constructors标志需要与 64 位一起使用,并且-I可以选择指向标头位置(解包库的位置):

g++ test1.cpp -fno-elide-constructors -I<path_to_headers>
于 2016-02-19T17:39:45.660 回答