2016-02-19 77 views
0

我试图在Ubuntu 15.10上从SymbolicC++ 3-3.35-ac.tar安装SymbolicC++。我做了一个./configure,make,sudo make install,没有任何错误。Linux上的SymbolicC++错误

我试图编译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维基百科的文章++

我收到以下错误:

[email protected]:~/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 
+0

校正:须藤使安装应be sudo make install – DougT

+0

您可以使用[编辑](http://stackoverflow.com/posts/35510776/edit)链接更正您的问题。 –

+0

它看起来像symbolicC++是一个只有标题的库。至少在我的实验中,你的代码没有'-lsymbolicC++ '生成OK。该程序崩溃,可能是因为库中存在错误,但这是另一个问题。 –

回答

2

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

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.

编辑:但似乎更适用于图书馆的只有头版本(有两个版本,仅邮件头和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> 
+0

我得到了同样的错误:doug @ doug-Z170X-UD5:〜/ books_computerAlgebraSys $ g ++ test1.cpp -lsymbolicC++ -fno-elide-constructors /usr/local/lib/libsymbolicc++.so:未定义引用数字: :Number(double const&)' /usr/local/lib/libsymbolicc++.so:未定义引用编号 :: Number(int const&)' collect2:错误:ld返回1退出状态 – DougT

+0

什么是您的g ++版本? ('g ++ --version')我刚刚尝试过,并且能够构建相同版本的libsymbolicC++和测试cpp,没有任何问题(但具有Ubuntu 14.04 64位,g ++ 4.8.4)。似乎该库可能已经生成错误(当它报告* .so本身内部未解析的外部数据时)。 – axalis

+0

我有g ++ 4.8.5。我使用这个版本,因为我的图形卡的CUDA开发系统需要它。我对这个版本的g ++没有任何问题。 – DougT