Ошибка SymbolicC ++ в Linux

Я пытаюсь установить SymbolicC ++ из SymbolicC ++ 3-3.35-ac.tar на Ubuntu 15.10. Я сделал ./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

1

Решение

Попробуйте добавить «-fno-elide-constructors» в командную строку g ++:

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

С главной страницы проекта http://issc.uj.ac.za/symbolic/symbolic.html:

Пользователям SymbolicC ++ с 64-битным GCC может потребоваться использовать флаг -fno-elide-constructors.

редактировать: Но, похоже, это больше относится к версии библиотеки только для заголовков (есть две версии: версия только для заголовков и версия библиотеки Autoconf). Но я попробовал с вашим примером и библиотекой AC, и для меня она прекрасно работает и работает даже без «-fno-elide-constructors» (Ubuntu 14.04 64-bit, g ++ 4.8.4).

Редактировать 2В заключение, похоже, что версия библиотеки autoconf почему-то не работает на всех машинах. С библиотекой только для заголовка -fno-elide-constructors Флаг должен быть использован с 64-битным, и -I опция, указывающая на местоположение заголовков (где библиотека распакована):

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]