Установка пакетов C ++ на Ubuntu

В настоящее время я работаю Ubuntu 20.04.2 LTS.

Я пытаюсь установить пакет C ++ Linbox ( https://linalg.org/ ). Я пытаюсь установить его на Ubuntu, используя apt-get install, поэтому я делаю следующее:

sudo apt-get install liblinbox-dev
sudo apt-get install libgivaro-dev
sudo apt-get install fflas-ffpack

Поскольку Givaro и Fflas-ffpack необходимы пакеты для Linbox. Когда я пытаюсь скомпилировать пример файла Call Rank.cpp, я получаю сообщение об ошибке:

In file included from /usr/include/linbox/field/hom.h:37,
                 from /usr/include/linbox/matrix/densematrix/blas-matrix.h:43,
                 from /usr/include/linbox/matrix/dense-matrix.h:79,
                 from /usr/include/linbox/matrix/matrixdomain/blas-matrix-domain.h:51,
                 from /usr/include/linbox/matrix/matrix-domain.h:68,
                 from /usr/include/linbox/matrix/sparsematrix/sparse-generic.h:80,
                 from /usr/include/linbox/matrix/sparse-matrix.h:70,
                 from rank.cpp:40:
/usr/include/linbox/ring/ntl/ntl-zz.h:33:10: fatal error: NTL/ZZ.h: No such file or directory
   33 | #include <NTL/ZZ.h>
      |          ^~~~~~~~~~
compilation terminated.

после установки NTL с помощью

sudo apt-get install libntl-dev

, но после попытки снова компилировать, я получаю следующую ошибку (это просто последний бит Ошибка, как есть намного выше):

rank.cpp:(.text._ZNK6Givaro5ZRingINS_7IntegerEE4readERSiRS1_[_ZNK6Givaro5ZRingINS_7IntegerEE4readERSiRS1_]+0x27): undefined reference to `Givaro::operator>>(std::istream&, Givaro::Integer&)'
/usr/bin/ld: /tmp/cccUiBtG.o: in function `Givaro::ZRing<Givaro::Integer>::write(std::ostream&, Givaro::Integer const&) const':
rank.cpp:(.text._ZNK6Givaro5ZRingINS_7IntegerEE5writeERSoRKS1_[_ZNK6Givaro5ZRingINS_7IntegerEE5writeERSoRKS1_]+0x27): undefined reference to `Givaro::operator<<(std::ostream&, Givaro::Integer const&)'
/usr/bin/ld: /tmp/cccUiBtG.o: in function `Givaro::UnparametricOperations<Givaro::Integer>::assign(Givaro::Integer&, Givaro::Integer const&) const':
rank.cpp:(.text._ZNK6Givaro22UnparametricOperationsINS_7IntegerEE6assignERS1_RKS1_[_ZNK6Givaro22UnparametricOperationsINS_7IntegerEE6assignERS1_RKS1_]+0x27): undefined reference to `Givaro::Integer::operator=(Givaro::Integer const&)'
/usr/bin/ld: /tmp/cccUiBtG.o: in function `Givaro::UnparametricOperations<Givaro::Integer>::read(std::istream&, Givaro::Integer&) const':
rank.cpp:(.text._ZNK6Givaro22UnparametricOperationsINS_7IntegerEE4readERSiRS1_[_ZNK6Givaro22UnparametricOperationsINS_7IntegerEE4readERSiRS1_]+0x27): undefined reference to `Givaro::operator>>(std::istream&, Givaro::Integer&)'
/usr/bin/ld: /tmp/cccUiBtG.o: in function `Givaro::UnparametricOperations<Givaro::Integer>::write(std::ostream&, Givaro::Integer const&) const':
rank.cpp:(.text._ZNK6Givaro22UnparametricOperationsINS_7IntegerEE5writeERSoRKS1_[_ZNK6Givaro22UnparametricOperationsINS_7IntegerEE5writeERSoRKS1_]+0x27): undefined reference to `Givaro::operator<<(std::ostream&, Givaro::Integer const&)'
/usr/bin/ld: /tmp/cccUiBtG.o: in function `void std::_Construct<Givaro::Rational>(Givaro::Rational*)':
rank.cpp:(.text._ZSt10_ConstructIN6Givaro8RationalEJEEvPT_DpOT0_[_ZSt10_ConstructIN6Givaro8RationalEJEEvPT_DpOT0_]+0x26): undefined reference to `Givaro::Neutral::zero'
/usr/bin/ld: rank.cpp:(.text._ZSt10_ConstructIN6Givaro8RationalEJEEvPT_DpOT0_[_ZSt10_ConstructIN6Givaro8RationalEJEEvPT_DpOT0_]+0x4a): undefined reference to `Givaro::Rational::Rational(Givaro::Neutral)'
/usr/bin/ld: /tmp/cccUiBtG.o: in function `void std::_Construct<Givaro::Rational, Givaro::Rational const&>(Givaro::Rational*, Givaro::Rational const&)':
rank.cpp:(.text._ZSt10_ConstructIN6Givaro8RationalEJRKS1_EEvPT_DpOT0_[_ZSt10_ConstructIN6Givaro8RationalEJRKS1_EEvPT_DpOT0_]+0x43): undefined reference to `Givaro::Rational::Rational(Givaro::Rational const&)'
collect2: error: ld returned 1 exit status

Какой самый простой способ установить этот пакет вместе со всеми его требуемыми зависимостями? Я прошу прощения, я не очень хорошо с установкой такого рода пакетов.

1
задан 14 March 2021 в 19:55

1 ответ

Ваша команда

g++ rank.cpp -o rank

недостаточно для создания исполняемой программы - она ​​не может связать любую из необходимых библиотек (и установить соответствующие флаги компиляции).

Самый простой способ получить их использование предоставленного PKG-CONFIG Файл:

g++ -o rank rank.cpp $(pkg-config --cflags --libs linbox)

Если вы заинтересованы в том, что есть флаги / библиотеки, вы можете выполнить команду напрямую:

$ pkg-config --cflags --libs linbox
-DDISABLE_COMMENTATOR -fopenmp -fabi-version=6 -llinbox-1.6.3 -lntl -lmpfr -liml -fopenmp -lblas -llapack -lgivaro -lgmp -lgmpxx
0
ответ дан 18 March 2021 в 23:26

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

Похожие вопросы: