Linux가 설치된 PC는 단 한 대뿐입니다. 그러나 동일한 lib의 여러 버전이 있습니다. 서로 다른 소프트웨어는 동일한 lib의 서로 다른 버전에 따라 달라질 수 있으므로 시스템에 모두 보관해야 합니다.
계속해서 잘 작동할 수 있는 좋은 아이디어가 있나요?
어떤 참고자료든 환영합니다.
[업데이트]
예를 들어:
g++4.8과 g++5.2 등 두 가지 버전의 g++가 있습니다.
/soft/g++/4.8/
관련 파일을 다음 과 같은 다른 경로에 저장하고 싶습니다.
/soft/g++/5.2
g++를 사용할 때 간단한 명령어로 쉽게 버전을 변경할 수 있습니다. 소프트웨어 환경 관리를 찾았습니다http://modules.sourceforge.net/
답변1
라이브러리에서 정의한 경우소나메올바르게, 아무런 어려움 없이 여러 버전을 설치할 수 있습니다. 예를 들어, 현재 세 가지 버전이 libreadline
설치되어 있습니다.
$ ls -l /lib/x86_64-linux-gnu/libreadline.so.*
lrwxrwxrwx 1 root root 18 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 263352 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root 18 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6 -> libreadline.so.6.3
-rw-r--r-- 1 root root 296792 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6.3
lrwxrwxrwx 1 root root 18 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 309168 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7.0
이는 프로그램이 soname에 연결되기 때문에 작동합니다. 따라서 버전 5용으로 빌드된 모든 항목은 에 대해 링크되고 libreadline.so.5
, 버전 6용으로 빌드된 모든 항목은 에 대해 링크됩니다 libreadline.so.6
. 라이브러리 측면의 요구 사항은 동일한 soname을 가진 모든 버전이 해당 ABI를 유지해야 한다는 것입니다. 새 버전은 추가할 수 있습니다. 기능을 제공하지만 기존 기능을 손상시킬 수는 없습니다. 주요 변경 사항은 소네임 범프를 의미합니다.
이 모든 작업이 올바르게 수행되면(라이브러리 측에서) 다음과 같은 여러 버전의 라이브러리가 필요하지 않습니다.같은soname: 최신 버전이 있는 한 동일한 soname을 사용하여 모든 버전의 라이브러리에 대해 구축된 모든 소프트웨어를 실행할 수 있습니다. 계속해서 libreadline
예제를 보면 라이브러리 버전 5.1로 구축된 소프트웨어는 버전 5.2에서 제대로 실행됩니다. (반대가 반드시 참인 것은 아닙니다. 5.2의 새로운 기능을 사용하는 소프트웨어는 5.1에서 실행되지 않습니다.)
libtool
아직 사용하고 있지 않다면 고려해 볼 가치가 있을 것입니다 (예, 알고 있습니다).버전 관리 체계소나메 범프를 처리합니다.
일부 라이브러리는 소나메 범프의 필요성을 최소화하기 위해 엄청난 노력을 기울입니다. GNU C 라이브러리가 한 예입니다. 이는 ABI를 손상시키지 않고 새로운 기능과 이전 버전과 호환되지 않는 변경 사항을 도입하기 위해 기호 버전 관리를 광범위하게 사용합니다(단지 이전 버전을 그대로 유지합니다.내부에도서관).