공유 객체 파일이 라이브러리 경로에 있는데 찾을 수 없습니다.

공유 객체 파일이 라이브러리 경로에 있는데 찾을 수 없습니다.

소스에서 plexmediaplayer를 설치하려고 합니다. 여기에는 /usr/local/lib 아래에 완료하고 설치한 libmpv.so.1 컴파일이 포함됩니다.

plexmediaplayer를 실행하면 다음 오류가 발생합니다.

$ plexmediaplayer 
plexmediaplayer: error while loading shared libraries: libmpv.so.1: cannot open shared object file: No such file or directory

ldconfig가 라이브러리를 올바르게 찾습니다.

$ ldconfig -v | grep libmpv
libmpv.so.1 -> libmpv.so.1.24.0

plexmiediaplayer 바이너리의 ldd는 libmpv를 보여줍니다:

$ ldd plexmediaplayer | grep libmpv
libmpv.so.1 => /usr/local/lib/libmpv.so.1 (0x00007f2fe4f33000)

이것은 심볼릭 링크입니다:

ls -l /usr/local/lib/libmpv.so.1
lrwxrwxrwx 1 root root 16 Feb  9 20:37 /usr/local/lib/libmpv.so.1 -> libmpv.so.1.24.0

공유 객체와 실행 파일은 모두 x86_64용으로 컴파일되며 plexmediaplayer를 실행하려는 루트가 아닌 사용자가 읽을 수 있습니다.

$ file /usr/local/lib/libmpv.so.1.24.0
/usr/local/lib/libmpv.so.1.24.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=855d9cbf952c76e3c0c1c1a162c4c94ea5a12b91, not stripped
$ file /usr/local/bin/plexmediaplayer 
/usr/local/bin/plexmediaplayer: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=dc92ac026c5ac7bc3e5554a591321de81a3f4576, not stripped

이것들은 모두 내 기계 아키텍처와 일치합니다.

$ uname -a
Linux hostname 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

plexmediaplayer에서 strace를 실행하면 다음과 같은 결과가 나타납니다.

$ strace -o lotsalogs -ff -e trace=file plexmediaplayer
open("/opt/Qt5.8.0/5.8/gcc_64//lib/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/Qt5.8.0/5.8/gcc_64//lib/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/Qt5.8.0/5.8/gcc_64//lib/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/Qt5.8.0/5.8/gcc_64//lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
open("/lib/x86_64-linux-gnu/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

포함하다:

open("/usr/local/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

그러나 심볼릭 링크를 통한 파일에 대한 권한은 다음과 같습니다.

ls -l /usr/local/lib/libmpv.so.1.24.0 
-rwxr-xr-x 1 root root 27872856 Mar 22 22:17 /usr/local/lib/libmpv.so.1.24.0

왜 내 바이너리가 이것을 찾을 수 없는지 아시나요?

/usr/local/lib편집: libmpv 및 plexmediaplayer 아래의 모든 항목을 지우고 /usr/local/bin소스 디렉터리별로 삭제한 후 가상 머신에 나란히 다시 설치했습니다. 가상 머신의 빌드는 작동하지만 호스트 머신의 빌드는 작동하지 않습니다. 나는 또한 두 컴퓨터 모두에서 ld를 해시했고 (놀랍지도 않게) 일치합니다.

답변1

알고 보니 몇 달 전에 plexmediaplayer용 의류를 구성했는데, 이로 인해 업데이트 및 재컴파일 시 문제가 발생했습니다.

답변2

나는 실행하여 문제를 해결할 수 있었다sudo cp /usr/local/lib/libmpv*.so /usr/lib32

ldd plexmediaplayer라이브러리가 있지만 동일한 결과를 표시하지만 작동하지 않습니다.

관련 정보