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

В настоящее время я пытаюсь разработать приложение на C++, которое будет включать решение некоторых алгебраических задач (таких как дифференцирование или интеграция) с использованием GiNaC; Я установил его сначала из Центра программного обеспечения Ubuntu (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оба не смогли скомпилировать.

2 ответа

Решение

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

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

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

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

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

I ran into the same exact issue, and I found 2 things that does bring you to where you want to be:

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

This enabled me to compile it, but the program would not run. Я нашел решение для этого. The error was "GLIB_CXX_3.4.21 not defined in libstdc++.so.6 with link time reference"

  1. Link statically to libstdc++ с -static-libstdc++

Как в:

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

мир

Другие вопросы по тегам