Иногда мне приходится устанавливать новые пакеты на серверы. Если мне повезет, я могу найти RPM, иначе я бьюсь головой об стену и пытаюсь скомпилировать пакет.
На этот раз мне нужно скомпилировать GnuPG, чтобы получить версию 2.1.15. Итак, я загружаю все зависимые библиотеки, запускаю configure && make install, наконец, я повторяю для самого пакета gnupg-2.1.15, и все идет хорошо, и make помещает все в / usr / local /, включая библиотеки и двоичные файлы. Почувствовав удачу, проверяю версию:
$ /usr/local/bin/gpg2 --version
gpg: Fatal: libgcrypt is too old (need 1.7.0, have 1.6.6)
Ой. Что случилось, поэтому я проверяю связанные библиотеки:
$ ldd /usr/local/bin/gpg2
linux-vdso.so.1 (0x00007fff15db4000)
libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007fcab5431000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007fcab521d000)
libassuan.so.0 => /lib64/libassuan.so.0 (0x00007fcab5009000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcab4c47000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fcab4a43000)
/lib64/ld-linux-x86-64.so.2 (0x00005615f5c77000)
Тьфу, старые встроенные библиотеки были скомпонованы. Я не часто компилирую программное обеспечение, поэтому я застрял здесь, пытаясь выяснить, как указать gcc через configure (или другой?), Чтобы связать зависимые библиотеки, которые были только что установлены в / usr / local / lib /
Это моя команда настройки для gnupg-2.1.15:
./configure --prefix=/usr/local --with-libgpg-error-prefix=/usr/local/\
--with-libgcrypt-prefix=/usr/local --with-libassuan-prefix=/usr/local\
--with-ksba-prefix=/usr/local --with-npth-prefix=/usr/local
Запуск этого в Fedora 24 с последними обновлениями, установленным ядром и gcc 6.2.1.
Спасибо, что нашли время рассмотреть мою проблему.
Похоже, вам нужна конкретная версия программы с зависимыми библиотеками или вы экспериментируете со своей системой.
Вы можете использовать переменную среды LD_LIBRARY_PATH
чтобы изменить путь поиска компоновщика, чтобы найти вашу новую библиотеку и использовать ее вместо старой. Вот страница чтобы предоставить более подробную информацию об этом.
Можешь попробовать export LD_LIBRARY_PATH=/usr/local/path/to/lib/directory
перед выполнением вашей программы. Чтобы сделать это постоянным, вы можете изменить ldconfig
пути поиска (обычно файлы в /etc/ld.so.conf.d
), а затем вызвать ldconfig
обновить кеши.