소스에서 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
라이브러리가 있지만 동일한 결과를 표시하지만 작동하지 않습니다.