Что произойдет, если я установлю последнюю версию существующей библиотеки путем сборки из исходного кода?

Я новичок в 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

Есть ли какое-либо объяснение этому?

1
задан 19 June 2012 в 14:02

2 ответа

есть ли шанс, что последствие моего действия заставит меня пожалеть?

Возможно. Продолжайте читать:

  • Новые ("включают... :) настроенные библиотеки, перезаписали новые неправильно сконфигурированные библиотеки, Вы не установили... причиненного вреда.

  • Новые библиотеки установлены под /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 путь для включения новых заголовков.

  • Зафиксировать это:

    1. Это - хорошая идея удалить repo-установленную-версию библиотеки, если это не имеет много зависимостей, в этом случае оставьте его быть (или необходимо было бы перекомпилировать партию).
    2. Установите checkinstall, который можно использовать вместо финала make install ступают, чтобы дать Вам deb файл, который легко установить и удалить.
    3. Установите корректный префикс установки через -DCMAKE_INSTALL_PREFIX=/usr директива перед компиляцией.

Это должно сделать это!

1
ответ дан 19 June 2012 в 14:02

Ну, новый он использует библиотеки из /usr/local/lib (это обычное место для программного обеспечения, установленного пользователем). На самом деле это хорошо, главное - не портить пакеты, установленные через менеджеры пакетов.
Расположение библиотек определяется обычно в Makefile. Я рекомендую не трогать это, если вы не знаете, что делаете. Версия, скомпилированная вами, будет использовать библиотеки из /usr/local/lib, другая версия, установленная из репо, будет использовать стандартное местоположение /usr/lib.

0
ответ дан 19 June 2012 в 14:02

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

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