GiNaC неопределенная ссылка

В настоящее время я пытаюсь разработать приложение на C ++, которое будет включать решение некоторых алгебраических задач (таких как дифференцирование или интеграция) с использованием GiNaC; Сначала я установил его из Ubuntu Software Center (Ubuntu 13.04), а затем прямо с ftp ftp://ftpthep.physik.uni-mainz.de/pub/GiNaC/ ; однако каждый раз я пытаюсь скомпилировать следующий пример программы:

#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;

int main()
{
symbol x("x"), y("y");
ex poly;

for (int i=0; i<3; ++i)
poly += factorial(i+16)*pow(x,i)*pow(y,2-i);

cout << poly << endl;
return 0;
}

я получаю список ошибок, все начинающиеся с «неопределенной ссылки на GiNaC ::». Я проверил, что cln также установлен и файлы заголовков находятся по умолчанию. Также при компиляции я использовал команду g++ -o simple pkg-config --cflags --libs ginac simple.cpp
а также g++ -o simple -lginac -lcln simple.cppоба не смогли скомпилировать.

0

Решение

Проблема заключается в порядке параметров в строке компиляции. Попробуйте один из следующих двух вариантов:

g++ -o simple simple.cpp `pkg-config --cflags --libs ginac`

g++ -o simple -Wl,--no-as-needed `pkg-config --cflags --libs ginac` simple.cpp

Идея заключается в том, что порядок работы с объектными файлами и библиотеками важен для компоновщика. Проще говоря, по умолчанию он связывает библиотеку только в том случае, если это необходимо для разрешения некоторых ранее неразрешенных символов.

Первый вариант выше перемещает библиотеки в конце параметров сборки (то есть после объектного файла для вашего кода), в то время как второй вариант отключает это поведение в компоновщике.

1

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

Я столкнулся с той же самой проблемой, и я нашел 2 вещи, которые приведут вас туда, где вы хотите быть:

  1. я размещен -lcln после -lginac в командной строке

Это позволило мне скомпилировать его, но программа не запустилась. Я нашел решение для этого. Ошибка была "GLIB_CXX_3.4.21 not defined in libstdc++.so.6 with link time reference"

  1. Ссылка статически на libstdc++ с -static-libstdc++

Как в:

g++ -g testgin.cpp -o simple -lcln -lginac -static-libstdc++

мир

0

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