Arch: невозможно использовать pacman: ошибка при загрузке общих библиотек

Arch: невозможно использовать pacman: ошибка при загрузке общих библиотек

Я только что закончил установку 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)

Связанный контент