lib 종속성 충족

lib 종속성 충족

x64(현재 아키텍처)용으로 컴파일된 프로그램( foo여기서 부르겠습니다)이 있습니다. 실행하려고 하면 다음과 같이 나타납니다.

./foo: error while loading shared libraries: libgmp.so.3: cannot open shared object file: No such file or directory

출력의 관련 부분 locate:

/usr/lib/x86_64-linux-gnu/libgmp.so 
/usr/lib/x86_64-linux-gnu/libgmp.so.10
/usr/lib/x86_64-linux-gnu/libgmp.so.10.1.3

주위를 둘러보던 중 이런 질문을 발견했습니다.민트: /lib/i386-linux-gnu/libgmp.so.3을 설치하는 올바른 방법, 작성자는 "x86_64 설치가 필요한 32비트 바이너리가 있습니다."라고 말했습니다 . 해당 스레드에서 그들은 오류를 추가 하고 변경 하기 libgmp.so.3위해 Ubuntu 패키지의 컴파일된 32비트 버전을 설치할 것을 제안했습니다 ( 예상대로)/usr/lib/libgmp.so.3/usr/lib/libgmp.so.3.5.2locate libgmp

./foo: error while loading shared libraries: libgmp.so.3: wrong ELF class: ELFCLASS32

그래서 저는 바이너리 제작자에게 편지를 보냈고 그는 매우 유용하게 다시 컴파일했지만 라이브러리가 이제 140MB이므로 최선의 선택은 직접 다시 컴파일하는 것이라고 답장했습니다.

쌍에 대한 바이너리 종속성이 libgmp.so.3충족 되지 않는 이유는 무엇입니까 libgmp.so.10?

이것은 소프트웨어가 특정 라이브러리 버전에만 의존한다는 것을 의미합니까? 이것이 "소프트 코딩"이 아닐까요?

공유 라이브러리는 항상 이전 버전과의 호환성을 깨뜨립니까(그렇지 않다고 생각합니다)?

내 선택은 다음과 같습니다.

ㅏ. libgmp.so.3x64 다운로드 및 컴파일

b. 소프트웨어를 다시 컴파일합니다.

씨. 런타임 위험: libgmp.so.10(실제로는 ) 사용할 링크를 작성할 수 있나요 libgmp.so.3?

작동할까요? 장점/단점은 무엇입니까?

첨부된:

추가: bin의 ldd

linux-vdso.so.1 =>  (0x00007fff290fa000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f8061064000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8060e46000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8060b3f000)
libbz2.so.1 => /lib/x86_64-linux-gnu/libbz2.so.1 (0x00007f806092f000)
llibz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8060716000)
libgmp.so.3 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8060350000)
/lib64/ld-linux-x86-64.so.2 (0x00007f80612a0000)

답변1

/usr/lib/x86_64-linux-gnu/ldd 출력에서 ​​공유 라이브러리 검색을 아는 경로에 있는 것처럼 보이지 않습니다 . 슈퍼유저 권한으로 실행하여 이를 확인할 ld수 있습니다 ldconfig -v. 그러면 LD가 찾을 수 있는 모든 공유 라이브러리 목록이 출력됩니다. 해당 목록에서 libgmp를 찾을 수 없는 경우 라이브러리 검색 경로에 넣도록 /etc/ld.so.conf.d/[your-system-arch].conf라이브러리 를 편집해야 합니다 ./usr/lib/x86_64-linux-gnu/

관련 정보