Получил ошибку «Неопределенные символы» при компиляции файла .cpp с помощью ginac.

Я использую gcc (версия 11) для компиляции моего .cppфайл, а приведенный ниже код скопирован с официального сайта 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;
}

Я использовал команду компиляции следующим образом:

      gcc-11 -lstdc++ -lginac -lcln hello.cpp -o hello -I /usr/local/include -L /usr/local/lib

После этого у меня появились такие ошибки:

      Undefined symbols for architecture x86_64:
  "__ZN5GiNaC12archive_node6add_exERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_2exE", referenced from:
      __ZNK5GiNaC9containerISt6vectorE7archiveERNS_12archive_nodeE in ccEkVJyo.o
  "__ZN5GiNaC5basic12read_archiveERKNS_12archive_nodeERNS_9containerINSt7__cxx114listEEE", referenced from:
      __ZN5GiNaC9containerISt6vectorE12read_archiveERKNS_12archive_nodeERNS0_INSt7__cxx114listEEE in ccEkVJyo.o
  "__ZN5GiNaC6symbolC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", referenced from:
      _main in ccEkVJyo.o
  "__ZN5GiNaC9containerISt6vectorE8reg_infoE", referenced from:
      __ZN5GiNaC9containerISt6vectorE21get_class_info_staticEv in ccEkVJyo.o
  "__ZN5GiNaClsERSoRKNS_2exE", referenced from:
      _main in ccEkVJyo.o
  "__ZNK5GiNaC12archive_node14find_ex_by_locEN9__gnu_cxx17__normal_iteratorIPKNS0_8propertyESt6vectorIS3_SaIS3_EEEERNS_2exERNS_9containerINSt7__cxx114listEEE", referenced from:
      __ZN5GiNaC9containerISt6vectorE12read_archiveERKNS_12archive_nodeERNS0_INSt7__cxx114listEEE in ccEkVJyo.o
  "__ZNK5GiNaC12archive_node19find_property_rangeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_", referenced from:
      __ZN5GiNaC9containerISt6vectorE12read_archiveERKNS_12archive_nodeERNS0_INSt7__cxx114listEEE in ccEkVJyo.o
  "__ZNK5GiNaC5basic10eval_ncmulERKSt6vectorINS_2exESaIS2_EE", referenced from:
      __ZTVN5GiNaC9containerISt6vectorEE in ccEkVJyo.o
  "__ZNK5GiNaC5basic11to_rationalERSt3mapINS_2exES2_NS_10ex_is_lessESaISt4pairIKS2_S2_EEE", referenced from:
      __ZTVN5GiNaC9containerISt6vectorEE in ccEkVJyo.o
  "__ZNK5GiNaC5basic13contract_withEN9__gnu_cxx17__normal_iteratorIPNS_2exESt6vectorIS3_SaIS3_EEEES8_RS7_", referenced from:
      __ZTVN5GiNaC9containerISt6vectorEE in ccEkVJyo.o
  "__ZNK5GiNaC5basic13to_polynomialERSt3mapINS_2exES2_NS_10ex_is_lessESaISt4pairIKS2_S2_EEE", referenced from:
      __ZTVN5GiNaC9containerISt6vectorEE in ccEkVJyo.o
  "__ZNK5GiNaC5basic14subs_one_levelERKSt3mapINS_2exES2_NS_10ex_is_lessESaISt4pairIKS2_S2_EEEj", referenced from:
      __ZNK5GiNaC9containerISt6vectorE4subsERKSt3mapINS_2exES4_NS_10ex_is_lessESaISt4pairIKS4_S4_EEEj in ccEkVJyo.o
  "__ZNK5GiNaC5basic5matchERKNS_2exERSt3mapIS1_S1_NS_10ex_is_lessESaISt4pairIS2_S1_EEE", referenced from:
      __ZTVN5GiNaC9containerISt6vectorEE in ccEkVJyo.o
  "__ZNK5GiNaC5basic6normalERSt3mapINS_2exES2_NS_10ex_is_lessESaISt4pairIKS2_S2_EEES9_RNS_9containerINSt7__cxx114listEEE", referenced from:
      __ZTVN5GiNaC9containerISt6vectorEE in ccEkVJyo.o
  "__ZNK5GiNaC9containerISt6vectorE4infoEj", referenced from:
      __ZTVN5GiNaC9containerISt6vectorEE in ccEkVJyo.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

я знаю это Undefined Symbolsошибка часто возникает из-за ошибки ссылки, но подробные сообщения об ошибках выглядят так, как будто эти ошибки исходят от самого ginac.
Я пробовал разные заказы этих -lпараметры, но ошибки всегда есть.
Я старался clangа не компилировать этот файл и он работает. Итак, я думаю, что правильно установил библиотеку ginac. Но я все еще не понимаю этих ошибок при использовании gcc.
Кто-нибудь встречался с этой проблемой?
Буду очень признателен, если кто-нибудь может дать мне несколько советов!

1 ответ

У меня также были проблемы с использованием:

      gcc-11 -lstdc++ -lginac -lcln hello.cpp -o hello -I /usr/local/include -L /usr/local/lib

но он работал с:

      g++ -o hello hello.cpp `pkg-config --cflags --libs ginac`
Другие вопросы по тегам