Automake: каковы допустимые значения для * _la_LDFLAGS в Makefile.am? - PullRequest
1 голос
/ 31 октября 2008

Мне интересно, каковы возможные значения * _la_LDFLAGS в Makefile.am?

Если я задам этот вопрос, то это потому, что мне хотелось бы следующее:

Actual shared library : libA.so (or with the version number I don't care)
Symbolic links :        libA-X.Y.Z.so, libA-X.so, libA.so 
soname :                libA-X.so

Однако вот что я получаю, используя флаг -релиз :

Actual shared library : libA-X.Y.Z.so
Symbolic links :        libA.so 
soname :                libA-X.Y.Z.so    !!! this is not what I want 

Я тоже попробовал без флагов вообще и получил

Actual shared library : libA-0.0.0.so    !!! 0.0.0 and not the real version
Symbolic links :        libA.so, libA-0.so
soname :                libA-0.so        !!! 0.0.0 and not the real version

Как мне поступить? какой флаг мне использовать?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 01 ноября 2008

Вы должны использовать опцию -version-info в Libtool, чтобы указать версию интерфейса библиотеки, но обязательно прочитайте как работает управление версиями (или здесь для официального руководства.)

Вы можете дополнительно поиграть с -release, чтобы сделать номер версии вашего пакета более понятным, но я сомневаюсь, что вы когда-нибудь получите точное название, которое вам нужно. Libtool имеет свой собственный набор правил, определяющих, как называть файл и какие символические ссылки создавать в зависимости от системы: их действительно следует рассматривать как подробности реализации того, как установлена ​​общая библиотека.

1 голос
/ 01 ноября 2008

ИМХО, нужный макет нарушен. Приложения, связанные с вашей библиотекой, будут зависеть от libA-X.so из-за soname. Но что происходит, когда libA.so является версией X + 1? На что будет ссылаться символическая ссылка libA-X.so?

Идея макета, который вы получаете с флагом -release, заключается в том, что когда приложение связывается с -lA, оно приводит к тому, что оно связывается с последней версией. Тогда из-за soname он будет зависеть от libA-X.Y.Z.so во время выполнения. Когда вы устанавливаете новую версию библиотеки, она устанавливает новую libA-X.Y.Q.so, но она оставляет старую в покое - именно так, как ожидают старые приложения, которые зависят от нее. Из-за символической ссылки libA новые приложения по-прежнему будут ссылаться на последнюю версию.

Годы размышлений некоторых очень умных людей вошли в схему управления версиями, которая позволяет новым приложениям связываться с последней версией библиотеки, в то же время позволяя нескольким версиям мирно сосуществовать, чтобы удовлетворить зависимости для приложений, которым они нужны. Мой совет, не думайте обо всем этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...