Я новичок в Linux и использую менеджер пакетов Synaptic для установки всего необходимого мне программного обеспечения. Я сделал это также для mathgl, библиотеки для научных графов.
Недавно в сети появилась новая версия, но не в диспетчере пакетов. Я скачал исходники и попытался установить его вручную. В инструкции сказано:
cmake .
cmake .
make
make install
Я сделал то же самое, но потом понял, что забыл некоторые варианты сборки. Я выполнил поиск в Интернете, чтобы найти способ удалить библиотеку, чтобы я мог установить ее с новыми настройками, но я не получил четкого ответа. Я обнаружил, что когда дело доходит до удаления в Linux, если разработчик не предоставил сценарий удаления, вы работаете самостоятельно, и это не тривиально.
Имея это в виду, я просто попытался установить библиотеку, не удаляя неправильно настроенную.
cmake -D enable-all=on -D enable-langall=on .
cmake -D enable-all=on -D enable-langall=on .
make
make install
Все вроде бы хорошо. Мой вопрос заключается в следующем: есть ли вероятность того, что последствия моих действий снова станут преследовать меня?
Я также обеспокоен тем, что старая библиотека не была удалена так же, как старые заголовки. Другая странная вещь заключается в том, что старые заголовки находятся в
/usr/lib/mgl
, а новые - в
/usr/local/lib/mgl2
Есть ли какое-либо объяснение этому?
есть ли шанс, что последствие моего действия заставит меня пожалеть?
Возможно. Продолжайте читать:
Новые ("включают... :) настроенные библиотеки, перезаписали новые неправильно сконфигурированные библиотеки, Вы не установили... причиненного вреда.
Новые библиотеки установлены под /usr/local
потому что это - значение по умолчанию для большого количества дистрибутивов Linux, но не Ubuntu; Ubuntu помещает их под /usr
. Первый хорошо для двоичных файлов (/usr/local/bin
), который Ubuntu имеет в ее пути по умолчанию, и они будут иметь приоритет по любым двоичным файлам, установленным в /usr/bin
, но это не верно для библиотек, потому что /usr/local/lib
не находится в пути по умолчанию.
Любые программы, которые пользуются этой библиотекой, продолжат использовать более старые заголовки/версию в /usr/lib
, если Вы конкретно не говорите тем программам использовать новые, например, путем добавления префикса их LD_LIBRARY_PATH=...
или путем явного добавления /usr/local/lib
к Вашему пути. Для компиляции вещей, которые зависят от этой библиотеки, необходимо будет явно указать /usr/local/lib
путь для включения новых заголовков.
Зафиксировать это:
make install
ступают, чтобы дать Вам deb файл, который легко установить и удалить.-DCMAKE_INSTALL_PREFIX=/usr
директива перед компиляцией.Это должно сделать это!
Ну, новый он использует библиотеки из /usr/local/lib
(это обычное место для программного обеспечения, установленного пользователем). На самом деле это хорошо, главное - не портить пакеты, установленные через менеджеры пакетов.
Расположение библиотек определяется обычно в Makefile. Я рекомендую не трогать это, если вы не знаете, что делаете. Версия, скомпилированная вами, будет использовать библиотеки из /usr/local/lib
, другая версия, установленная из репо, будет использовать стандартное местоположение /usr/lib
.