이 SO(공유 객체)가 .3gf로 끝나는 이유는 무엇입니까?

이 SO(공유 객체)가 .3gf로 끝나는 이유는 무엇입니까?

ubuntu trusty tahr에서는 libblas3저장소에서 설치할 때 다르게 동작합니다 /usr/lib/libblas.so.3gf. 초점을 맞추면 다르게 동작하고 /usr/lib/x86_64-linux-gnu/libblas.so.3.dll에 설치됩니다.이 답변. 하지만 .3gf이 오래된 파일 확장자에 대한 정보를 찾을 수 없습니다 . libblas.so.3및 옆에 있습니다 libblas.so. 무엇을 나타냅니까 .3gf?

답변1

일반적으로 공유 라이브러리에는 하나의 파일과 두 개의 기호 링크가 함께 제공됩니다.

  • 파일 libfoo.so.1.2.3(뒤에 여러 숫자 .so)의 이름은 소프트웨어 프로젝트 역할을 하는 라이브러리 버전의 이름을 따서 지정됩니다. 직접적으로 사용되지는 않고 두 개의 기호 링크 중 하나를 통해서만 사용됩니다.
  • 기호 링크 libfoo.so.V(뒤에 숫자 .so)가 "soversion"(공유 객체 버전)의 이름을 따서 명명되었습니다. 라이브러리에서 호환되지 않는 변경이 발생할 때마다 버전이 변경됩니다.ABI. 프로그램은 특정 버전의 라이브러리와 연결됩니다. 서로 다른 버전의 라이브러리에 대해 작성된 프로그램이 있는 경우 서로 다른 버전의 라이브러리를 서로 다른 버전으로 설치할 수 있습니다.
  • 기호 libfoo.so(뒤에 숫자 없음 .so)는 설치한 개발 파일(헤더, 정적 라이브러리)의 버전입니다. 프로그램을 컴파일하면 가리키는 버전에 관계없이 링크됩니다 libfoo.so(바람직하게는 헤더 파일과 호환 가능).

파일 이름의 변환은 일반적으로 호환되지 않는 변경이 발생할 때마다 증가하는 정수이지만 반드시 그럴 필요는 없습니다.

한동안 데비안은 BLAS 라이브러리의 두 가지 API 비호환 버전을 유지관리했습니다. libblas3하나는 업스트림 프로젝트의 API가 있고 libblas3gf다른 하나는"C 인터페이스에 대한 몇 가지 사소한 변경 사항". 업스트림 API와 연결되는 프로그램용으로 libblas3설치된 패키지 와 Debian API와 연결되는 프로그램용으로 설치된 패키지입니다.libblas.so.3libblas3gflibblas.so.3gf

2011 년에, 데비안은 이 라이브러리의 별도 버전 유지를 중단했습니다. (내가 이해하는 바에 따르면 데비안 변경 사항이나 이와 유사한 내용이 업스트림에 병합되었으므로 3gf 버전의 향후 버전에는 libblas33gf 버전의 모든 기능이 포함됩니다.) 따라서 3gf 버전은 더 이상 사용되지 않지만 파일은 .so여전히 ​​기존 컴파일된 버전을 실행하는 데 사용할 수 있습니다. 프로그램. 이전 버전과의 호환성 별칭을 제거하는 데 몇 년이 걸렸습니다. Ubuntu 18.04에는 여전히 포함되어 있지만 Ubuntu 20.04에는 더 이상 포함되어 있지 않습니다.

관련 정보