1

Я использую Ubuntu 10.04 и хочу использовать tmux 1.6. tmux зависит от libevent 2.

Мое решение состояло в том, чтобы скомпилировать libevent2 и перейти в /usr/local/lib затем скомпилировать tmux для этой lib и перейти в /usr/local/bin . Это прекрасно работает, пока ...Я перезагружаюсь. Это только предположение с моей стороны, но кажется, что другие двоичные файлы теперь связаны с библиотекой libevent2, вероятно, потому что он находится на пути к библиотеке. Поскольку существует более 60 пакетов с зависимостями libevent1, моя установка в основном сходит с ума.

Есть ли идиоматический способ подойти к запуску приложения, которое зависит от базовой библиотеки в другой версии? Должен ли я просто статически связать библиотеку?

2 ответа2

0

http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-102-3/ предлагает

Загрузка определенных библиотек

Если вы используете старое приложение, для которого требуется определенная более старая версия общей библиотеки, или если вы разрабатываете новую общую библиотеку или версию общей библиотеки, вы можете переопределить пути поиска по умолчанию, используемые загрузчиком. Это также может понадобиться сценариям, использующим общие библиотеки для конкретного продукта, которые могут быть установлены в дереве /opt. Так же, как вы можете установить переменную PATH, чтобы указать путь поиска для исполняемых файлов, вы можете установить переменную LD_LIBRARY_PATH для списка каталогов, разделенных двоеточиями, в которых следует искать общие библиотеки перед системными, указанными в ld.so.cache. Например, вы можете использовать команду вроде:

export LD_LIBRARY_PATH=/usr/lib/oldstuff:/opt/IBM/AgentController/lib

Ссылка на статью иллюстрирует, как использовать ldd, чтобы узнать, от каких библиотек зависит программа.

0

Скомпилированные бинарные программы обычно ссылаются на /usr/lib/libXXX.so.1.2.3

Если вы используете конкретную новую версию, вы можете оставить ее в /usr/lib/libXXX.so.3.4.5 и ваша вновь созданная программа должна ссылаться на это.

На самом деле вы можете проверить, ссылаются ли старые программы на новую библиотеку с помощью ldd /path/to/program .

Если это действительно произойдет, вы можете:

  • поместите новую библиотеку в отдельный каталог /special/path/lib и
  • запустите вашу специальную программу с помощью сценария оболочки-оболочки, который устанавливает LD_LIBRARY_PATH=/special/path/lib:$LD_LIBRARY_PATH а затем запускает двоичный файл или
  • если вы компилируете свою программу самостоятельно, вы можете передать LDFLAGS=-Wl,-rpath,/special/path/lib , это жестко закодирует путь поиска специальной библиотеки в вашей программе (хорошо, потому что работает без сценария-оболочки)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .