Номер версии установленной общей библиотеки не соответствует LT_VERSION_INFO

Номер версии libtool разделяемой библиотеки установлен в configure.ac с помощью LT_VERSION_INFO="lt_current:lt_revision:lt_age" но когда я установил его 0:1:0make install устанавливает lib..so.0.0.1и когда я установил его на 3:2:1 это устанавливает lib..so.2.1.2, Это не кажется правильным. Если да, может кто-нибудь объяснить, что происходит? Иначе что может быть не так? Версия libtool - 2.4.2.

Я знаком с тем фактом, что версии libtool отличаются от версии выпуска. Это не проблема здесь.

1 ответ

Решение

Вы можете найти это объяснение и пример полезным; в сети есть другие похожие на него, но в конце у этого есть практический рабочий процесс (как и документация для libtool). Итак, имея это в виду, давайте рассмотрим ваши примеры для -version-info:

0: 1: 0

Говорит libtool: для API 0, я сделал одно изменение в исходных файлах, и не было обратно совместимых дополнений к API.

Сейчас libtool абстрагирует процесс создания совместно используемой библиотеки от реальных инструментов платформы, так что вы можете просто удалить встроенный в систему tartool и набрать ./configure && make && make install и иметь разумные шансы на работу программного обеспечения в конце этой сборки. Некоторые платформы будут заботиться о содержании -version-info (например, Linux, который я вроде бы предполагаю, что вы создаете, так что вы увидите libfoo.so.0.0.1), а другие не будут (например, Android, так что вы увидите libfoo.so), и есть другие, которые немного заботятся. поскольку libtool должен охватывать разные платформы, им приходилось придумывать схему, которая позволяла бы им вычислять правильные значения на всех целевых платформах. И вот почему нумерация несколько не интуитивна.

Поэтому в Linux "0:1:0" переводится как libfoo.so.0.0.1 так как компоновщик использует основной.незначительный.Схемапатч-уровня для разграничения библиотек. На другой ОС это может быть иначе или вообще не существовать.

3: 2: 1

Говорит libtool: для API 2 я сделал одно обратно совместимое изменение API и два последующих изменения источника. Вы получаете номер API по (current - age) = (3 - 1) = 2. Вы знаете, что у вас есть последующие изменения, так как ревизия сбрасывается в 0 при любом изменении API (а текущая увеличивается). И так в Linux это означает, что вы получите libfoo.so.2.1.2,

Другие вопросы по тегам