我正在尝试从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++上的Wikipedia文章

我收到以下错误:
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

最佳答案

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

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

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



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

编辑2 :总结起来,由于某种原因,似乎库autoconf版本并非在每台机器上都起作用。对于仅 header 的库,-fno-elide-constructors标志需要与64位一起使用,并且-I选项指向 header 的位置(解压缩库的位置):
g++ test1.cpp -fno-elide-constructors -I<path_to_headers>

关于c++ - Linux上的SymbolicC++错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35510776/

10-11 15:40