https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
libtool의 버전 관리 시스템을 사용하려면 링크 모드 중에 -version-info 플래그를 사용하여 libtool에 버전 정보를 지정해야합니다 (링크 모드 참조).
이 플래그는‘current [: revision [: age]]’형식의 인수를 허용합니다. 따라서 -version-info 3 : 12 : 1을 전달하면 current가 3으로, revision이 12로, age가 1로 설정됩니다.
revision 또는 age이 생략되면 기본값은 0입니다. 또한 age은 current 인터페이스 번호보다 작거나 같아야합니다.
다음은 라이브러리 버전 정보를 업데이트하는 데 도움이되는 일련의 규칙입니다.
1. 각 libtool 라이브러리에 대한 버전 정보 '0 : 0 : 0'으로 시작합니다.
2. 소프트웨어가 공개되기 직전에 버전 정보를 업데이트하십시오. 더 빈번한 업데이트는 필요하지 않으며 현재 인터페이스 번호가 더 빨리 커지는 것을 보장합니다.
3. 마지막 업데이트 이후 라이브러리 소스 코드가 변경된 경우 revision을 증분합니다 (‘c : r : a’ -> ‘c : r + 1 : a’가 됨).
4. 마지막 업데이트 이후 인터페이스가 추가, 제거 또는 변경된 경우 current를 증가시키고 revision을 0으로 설정합니다.
5. 마지막 공개 릴리스 이후에 인터페이스가 추가 된 경우 age를 늘립니다.
6. 마지막 공개 릴리스 이후 인터페이스가 제거되거나 변경된 경우 age를 0으로 설정합니다.
패키지의 릴리스 번호와 일치하도록 인터페이스 번호를 설정하지 마십시오. 이것은 라이브러리 버전의 목적에 대한 오해를 조장하는 남용입니다. 대신, -release 플래그를 사용하십시오 (릴리스 번호 참조). 패키지의 모든 릴리스가 다른 릴리스와 바이너리 호환되지 않을 것이라는 경고를받습니다.
다음 설명은 위의 규칙을 좀 더 잘 이해하는 데 도움이 될 수 있습니다. 공유 라이브러리의 변경 사항에 대한 라이브러리 사용자의 가능한 반응에는 세 가지가 있습니다.
1. 이전 버전을 사용하는 프로그램은 새 버전을 드롭 인 대체로 사용할 수 있으며 새 버전을 사용하는 프로그램도 이전 버전에서 작동 할 수 있습니다. 즉, 다시 컴파일하거나 다시 링크 할 필요가 없습니다. 이 경우 revision 만 이동하고, current 또는 age을 만지지 마십시오.
2. 이전 버전을 사용하는 프로그램은 새 버전을 드롭 인 대체로 사용할 수 있지만 새 버전을 사용하는 프로그램은 이전 버전에없는 API를 사용할 수 있습니다. 즉, 런타임시 이전 버전에 연결하는 경우 새 버전에 연결하는 프로그램이 "해결되지 않은 기호"와 함께 실패 할 수 있습니다. revision을 0으로 설정하고 current 및 age을 이동합니다.
3. 새 버전을 사용하려면 프로그램을 변경, 재 컴파일 및 다시 링크해야 할 수 있습니다. current를 이동하고, revision 및 age을 0으로 설정합니다.
위의 설명에서 해당 라이브러리를 사용하는 프로그램은이를 사용하는 다른 라이브러리로 대체 될 수도 있습니다.