[고쳐 쓰다]

[고쳐 쓰다]

Linux가 설치된 PC는 한 대뿐입니다. 그러나 동일한 라이브러리의 여러 버전이 있습니다. 서로 다른 소프트웨어는 동일한 라이브러리의 서로 다른 버전에 따라 달라질 수 있으므로 모두 시스템에 보관해야 합니다.

계속해서 원활하게 작동할 수 있는 좋은 아이디어가 있나요?

어떤 참고자료든 환영합니다.

[고쳐 쓰다]

예를 들어:

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아직 사용해보지 않으셨다면 한 번 고려해 볼 가치가 있을 것입니다. (예, 알고 있습니다.) 꽤 유용한 기능이 있습니다.버전 관리 체계Soname 충돌을 처리합니다.

일부 라이브러리는 soname 범프의 필요성을 최소화하기 위해 많은 노력을 기울입니다. 한 가지 예는 GNU C 라이브러리입니다. 이 라이브러리는 ABI를 손상시키지 않고 새로운 기능과 이전 버전과 호환되지 않는 변경 사항을 도입하기 위해 기호 버전 관리를 광범위하게 사용합니다. ,~에도서관).

관련 정보