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를 손상시키지 않고 새로운 기능과 이전 버전과 호환되지 않는 변경 사항을 도입하기 위해 기호 버전 관리를 광범위하게 사용합니다(단지 이전 버전을 그대로 유지합니다.내부에도서관).

관련 정보