libssl
우리는 버전을 로드해야 하는 라이브러리를 사용하고 있습니다 1.0.*
. libssl.so.1.1
작업에 필요한 Linux 시스템에서는 작동 하지 않습니다 .
우리는 다양한 버전을 로드해 보았고 일반적으로 작동했지만 한 고객의 시스템에는 다음과 같은 내용만 있었습니다.
/usr/lib64/libssl.so.1.1.0g
/usr/lib64/libssl.so.10
/usr/lib64/libssl.so.1.0.2m
/usr/lib64/libssl.so.1.1
libssl.so.1.0
로드 하려고 하는데 libssl.so.1.0.2
뒤에 오는 " " 때문에 찾을 수 없습니다.libssl.so.1.0.2m
m
libssl의 명명 체계가 무엇인지 알고 싶습니다(있는 경우)?
정말로 자체 버전을 제공해야 합니까, 아니면 더 좋은 방법이 있습니까?
libssl.so.1.0.2z
아래에서 위로 반복 해야 합니까 libssl.so.1.0.2a
? 라이브러리 경로를 수동으로 스캔해야 합니까?
답변1
어떻게 열었는지는 잘 모르겠습니다 libssl
. 아마도요 dlopen()
?
하드코딩된 디렉토리 경로 목록에서 라이브러리를 검색하는 것은 다소 불안정한 것처럼 들립니다. 동적 링커가 작업을 수행하도록 하는 것이 더 좋습니다. 구문 분석된 출력이 ldconfig -p
시도해 볼 가치가 있을까요? Debian 시스템에서는 다음이 표시됩니다.
$ ldconfig -p|grep ssl
libssl.so.1.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.1
libssl.so.1.0.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2
RHEL 7.4 시스템의 경우:
$ ldconfig -p|grep ssl
libssl3.so (libc6,x86-64) => /lib64/libssl3.so
libssl.so.10 (libc6,x86-64) => /lib64/libssl.so.10
Debian 시스템에서는 라이브러리가 에 있고 /usr/lib/x86_64-linux-gnu
RHEL 시스템에서는 라이브러리가 에 있습니다 /lib64
(라이브러리 이름도 매우 다름). 의 출력과 같은 것을 사용하지 않는 한 ldconfig
"모든 Linux 시스템에서 작업"하려는 경우 이러한 배포별 경로를 모두 직접 검색해야 합니다. 물론 디렉토리 경로가 나열되어 있지만 아마도 여전히 사용하기 더 쉽다고 /etc/ld.so.conf
생각합니다 .ldconfig