Я только что закончил установку Arch и настройку беспроводного соединения. Я хотел установить дополнительные пакеты, поэтому попробовал использовать pacman.
Но при каждом использовании команды я получаю следующую ошибку:
pacman: ошибка при загрузке общих библиотек: libcurl.so.4: невозможно открыть файл общего объекта: Такого файла или библиотеки нет.
Но в /usr/local/lib у меня есть следующие файлы/папки:
libcurl.a libcurl.a libcurl.so libcurl.so.4 libcurl.so.4.2.o pkgconfig
Так как же мне указать pacman на эти файлы?
решение1
Я не уверен, почему ваши libcurl.*
файлы находятся в /usr/local/lib
, но мои находятся /usr/lib
там, где им положено быть. Чтобы подтвердить, ldconfig
что не находит их, используйте
ldconfig -p | grep curl
Он не должен ничего печатать. Если это так, проверьте номер версии, возможно, вы получили неправильную версию.
Чтобы исправить это, вам нужно указать, ldconfig
где искать библиотеки. Вы можете либо поместить символическую ссылку /usr/lib
на соответствующие файлы в /usr/local/lib
, либо указать ldconfig
искать там напрямую:
echo /usr/local/lib | sudo tee -a /etc/ld.so.conf.d/local.conf
Затем запустите sudo ldconfig
обновление кэша.
И, возможно, попытайтесь выяснить, почему ваши библиотеки находятся не в том каталоге.
решение2
Вам нужно выяснить, где он ищет libcurl
(и не находит), поскольку он, очевидно, не проверяет /usr/local/lib
. Во-первых, я рекомендую запустить ldd против него, чтобы увидеть, отсутствуют ли какие-либо другие библиотеки:
ldd $(which pacman)
Надеюсь, вы strace
его установили, потому что это будет ваш следующий инструмент, с помощью которого вы сможете узнать, где искать libcurl
файлы.
strace -e open -o strace.log $(which pacman)
После того, как вы запустите это, less strace.log
и посмотрите, какие файлы он пытался открыть, это поможет вам определить, где он его ищет. Быстрое и грязное исправление будет копированием (или символической ссылкой) соответствующих файлов туда, /usr/local/lib
где он его ищет.
Вот что у меня получилось, когда я прошёл трассировку wget
:
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libidn.so.11", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/etc/wgetrc", O_RDONLY) = 3
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)