아치: 팩맨을 사용할 수 없습니다: 공유 라이브러리를 로드하는 중 오류가 발생했습니다

아치: 팩맨을 사용할 수 없습니다: 공유 라이브러리를 로드하는 중 오류가 발생했습니다

방금 Arch 설치와 무선 연결 설정을 마쳤습니다. 추가 패키지를 설치하고 싶어서 pacman을 사용해 보았습니다.

그러나 내가 사용하는 모든 명령에서 다음 오류가 발생합니다.

pacman: 공유 라이브러리를 로드하는 중 오류가 발생했습니다. libcurl.so.4: 공유 개체 파일을 열 수 없습니다. 해당 파일이나 라이브러리가 없습니다.

하지만 /usr/local/lib에는 다음 파일/폴더가 있습니다.

libcurl.a libcurl.a libcurl.so libcurl.so.4 libcurl.so.4.2.o pkgconfig

그렇다면 팩맨이 이 파일을 가리키도록 하려면 어떻게 해야 할까요?

답변1

libcurl.*왜 당신의 파일이 에 있는지는 모르겠지만 내 파일은 있어야 할 곳에 /usr/local/lib있습니다 . 찾을 수 없는지 /usr/lib확인하려면 다음을 사용하세요.ldconfig

ldconfig -p | grep curl

아무것도 인쇄되어서는 안 됩니다. 만약 그렇다면 버전 번호를 확인하세요. 잘못된 버전을 받았을 수도 있습니다.

ldconfig이 문제를 해결하려면 libs를 찾을 수 있는 위치를 알려줘야 합니다 . /usr/lib의 적절한 파일에 대한 심볼릭 링크를 넣거나 직접 검색하도록 /usr/local/lib지시할 수 있습니다 .ldconfig

echo /usr/local/lib | sudo tee -a /etc/ld.so.conf.d/local.conf

그런 다음 실행하여 sudo ldconfig캐시를 업데이트합니다.

그리고 아마도 libs가 잘못된 디렉토리에 있는 이유를 알아내려고 노력할 수도 있습니다.

답변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찾고 있는 위치로 복사(또는 심볼릭 링크)하는 것입니다.

내가 strace'd했을 때 얻은 것은 다음과 같습니다 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)

관련 정보