다음을 사용하여 rpm 패키지를 만들었습니다 rpmbuild
.
51f32ecb00b7:/rpm # rpm -qpR pkg.rpm
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.5)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libcrypto.so.1.0.0()(64bit)
libcurl.so.4()(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libjson-c.so.2()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
libssl.so.1.0.0()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
openSUSE를 실행하는 컴퓨터에서 빌드하려고 합니다. 그러나 다음과 같은 종속성 오류가 발생합니다.
51f32ecb00b7:/rpm # rpm -U pkg.rpm
error: Failed dependencies:
libcrypto.so.1.0.0()(64bit) is needed by pkg.noarch
libjson-c.so.2()(64bit) is needed by pkg.noarch
libssl.so.1.0.0()(64bit) is needed by pkg.noarch
내 질문은 libssl 종속성에 관한 것입니다. 내 시스템에는 다음과 같은 공유 개체가 있습니다.
51f32ecb00b7:/rpm # find / | grep libssl*.so
/lib64/libss.so.2
/lib64/libss.so.2.0
/usr/lib64/libss.so.2
/usr/lib64/libss.so.2.0
/usr/lib64/libssl.so.1.1
내 질문은: RPM을 이미 설치했는데 왜 오류가 발생합니까 libssl.so.1.1
? 내 RPM 패키지는 이에 의존하므로 libssl.so.1.0.0
호환되어서는 안됩니까? 제가 아는 한, 첫 번째 숫자는 공유 객체 간의 ABI 호환성을 정의하므로 종속성을 1.1
잘 처리해야 합니다 .1.0
마지막으로 다음을 실행하면:
51f32ecb00b7:/rpm # zypper install libopenssl1_0_0
51f32ecb00b7:/rpm # find / | grep libssl*.so
/lib64/libss.so.2
/lib64/libss.so.2.0
/usr/lib64/libss.so.2
/usr/lib64/libss.so.2.0
/usr/lib64/libssl.so.1.1
/usr/lib64/libssl.so.1.0.0
이제 이를 사용하면 /usr/lib64/libssl.so.1.0.0
작동합니다.
51f32ecb00b7:/rpm # rpm -U pkg.rpm
error: Failed dependencies:
libjson-c.so.2()(64bit) is needed by pkg.noarch
답변1
내 질문은: RPM을 이미 설치했는데 왜 오류가 발생합니까
libssl.so.1.1
?
귀하의 RPM에는 이 필요 libssl.so.1.0.0
하지만 필요하지는 않습니다 libssl.so.1.1
(아래 참조).
내 RPM 패키지가 이에 의존하므로
libssl.so.1.0.0
호환되어서는 안 되나요? 내가 아는 한, 첫 번째 숫자는 공유 객체 간의 ABI 호환성을 정의하므로 종속성은1.1
잘 처리되어야 합니다 (틀린 경우 수정해 주세요).1.0
많은 프로젝트에서는 이전 버전과의 호환성을 나타내는 지표로 주요 숫자를 사용하지만 이것이 필수는 아닙니다. 필요한 것은 동일한 soname을 가진 다른 버전의 라이브러리가 호환된다는 것입니다. 이것이 바로 RPM 요구사항이 soname 및 라이브러리 기호( libc.so.6
, GLIBC_2.14
)로 표현되는 이유입니다. soname은 어떤 라이브러리가 필요한지, 어떤 soname이 사용되는지를 나타내고 기호는 필요한 라이브러리 버전(또는 그 이상)을 나타냅니다. (라이브러리 개발자의) 보증은 다음과 같이 작동합니다. 주어진 버전의 라이브러리로 컴파일된 모든 프로그램은 soname이 변경되지 않고 주어진 버전 세트에 대해 유지되는 한 해당 버전 또는 이후 버전에서 작동합니다. 라이브러리 기호는 동일한 soname을 사용하여 모든 버전의 라이브러리에서 사용할 수 있으며 이러한 모든 버전의 라이브러리 기호도 제공합니다.
libssl
1.1은 1.0과 이전 버전과 호환되지 않습니다. 실제로 마이그레이션은 매우 어렵습니다. 1.0용으로 컴파일된 프로그램은 1.1 libssl
에서 작동하지 않습니다 libssl
. 이 사실을 표시하기 위해 이러한 라이브러리에는 다른 이름이 있습니다.