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

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

방금 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. /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찾고 있는 위치에서 적절한 파일을 복사(또는 심볼릭 링크)하는 것입니다.

이것이 내가 strace할 때 얻는 것입니다 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)

관련 정보