내 프로젝트에서 이미 컴파일되고 생성 된 두 개의 라이브러리를 사용하려고합니다. 우리는 liba.so (우리 자신의 라이브러리가 언젠가 다시 만들어 짐)와 libssl.so.10 (이것은 Linux에서 사용 가능합니다)이라고합시다.여러 버전의 라이브러리가 Linux에 포함되어 발생하는 버전 충돌을 해결하는 방법
이제 liba.so 데 의존 libcurl.so.3 & libssl.so.10 의존성 libcurl.so.4 (최신)
libcurl.so.3 및 libcurl.so.4 모두를 가지고있다 시스템에서 사용할 수 있습니다.
따라서 프로젝트에서 두 가지를 모두 사용하려고하면 버전 충돌이 발생합니다. 기대 되는가? 그렇다면 어떻게이 문제를 해결할 수 있습니까?
이 라이브러리를 다시 빌드하지 않고 최신 libcurl.so.4에서 liba.so 종속성을 수정할 수있는 방법이 있습니까? 아니면 최신 libcurl.so.4로 liba.so를 다시 빌드해야합니까? 당신의 도움이
첫 번째 솔루션에서 동일한 라이브러리에 두 라이브러리 (libcurl.so.3 및 libcurl.so.4)가 있습니다. 따라서 rpath 또는 LD_LIBRARY_PATH에 디렉토리 위치를 지정하면 기본적으로 충돌로 끝납니다. 그렇다면 명시 적으로 버전을 지정해야한다고 말하는 것입니까? 두 번째 해결 방안으로 이전 libcurl.so.3과 liba.so를 정적으로 링크하고 libcll.so.4를 동적으로 libssl.so.10과 함께 사용할 수 있습니까? – Jegan
귀하의 정보를 위해서, 이것은 Android가 아닙니다. 이것은 RedHat 개발 서버입니다. – Jegan
libcurl.so.3과 libcurl.so.4는 아마도 이진 호환이되지 않습니다 (따라서 버전 범프의 이유). 동일한 버전에 대해 모든 것을 컴파일해야하거나 호환되지 않는 ABI로 문제를 제거하기 위해 정적 링크를 수행해야합니다. 동적 링커가 libcurl.so.3을 먼저로드하면 libcurl.so.4가 종속됩니다 (반대의 경우도 마찬가지 임). – jww