2008-10-31 9 views
1

Мне интересно, какое возможное значение для * _la_LDFLAGS в Makefile.am?Automake: каковы допустимые значения для * _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 

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

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 

Как sh ould я делаю? какой флаг использовать?

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

ответ

2

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

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

1

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

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

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

+0

Ну, я понимаю, что вы говорите. Однако представьте, что у меня есть библиотека B, связанная с libA-X.Y.Z.so, и я освобождаю libA-X.Y.Q.so. Если я создаю RPM и использую YUM, я должен указать для пакета B, что libA = XYZ вместо libA> = XYZ, и у меня есть ощущение, что оно слишком ограничительное, поскольку ... – Barth

+0

lib B может использовать более высокую версию без проблем , Вы можете увидеть этот другой вопрос, чтобы лучше понять, что меня беспокоит, используя -release: http://stackoverflow.com/questions/252819/c-how-to-link-against-libaso-and-not-liba-xyzso – Barth