방금 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)