2016-02-19 81 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