Boost, bjam и символические ссылки - PullRequest
0 голосов
/ 28 января 2010

Я сгенерировал несколько библиотек Boost с помощью bjam и получил много символических ссылок.

Для даты и времени:

libboost_date_time-gcc41-мт-1_39.a

libboost_date_time-gcc41-mt-1_39.so -> libboost_date_time-gcc41-mt-1_39.so.1.39.0

libboost_date_time-gcc41-мт-1_39.so.1.39.0

libboost_date_time-gcc41-mt.a -> libboost_date_time-gcc41-mt-1_39.a

libboost_date_time-gcc41-mt.so -> libboost_date_time-gcc41-mt-1_39.so.1.39.0

Почему бы мне просто не получить .a и .so? Почему эти 3 символические ссылки? И почему исходные файлы имеют столь сложное имя для .so, причем версия выпуска упоминается дважды?

Разве нельзя просто иметь:

libboost_date_time-gcc41-мт-1_39.a libboost_date_time-gcc41-mt-1_39.so

Спасибо за помощь. Я не знаю, что делать с этими символическими ссылками.

Примечание: я новичок в Linux.

Ответы [ 2 ]

2 голосов
/ 28 января 2010

Я не знаю ничего конкретного, чтобы повысить или bjam.

Но последние два, если вы видите, не зависят от версии. Поэтому любой потребитель этого файла .so или .a может просто использовать базовое имя для своих целей. В случае, если доступна любая более новая версия этих библиотек, ее можно поместить туда и просто изменить ссылки sym, чтобы они указывали на новую версию. Таким образом, они могут иметь обе версии на месте, так что, если кто-то хочет использовать конкретную версию, они могут использовать ее напрямую без ссылок sym. И люди, которые не заботятся о версии, могут использовать само базовое имя для получения последней версии!

Я думаю, что этот способ используется, если вы устанавливаете разные версии Java на Unix-машине. По крайней мере, я помню, как видел это в своей Ubuntu. У нас есть отдельные папки для каждой версии / обновления Java. И у вас есть ссылка на другую папку sym, которая всегда указывает на папку последней версии jre. Это также видно, если вы устанавливаете другую версию gcc поверх существующей версии (особенно пакеты rpm в linux)

1 голос
/ 28 января 2010

Символическая ссылка - это способ совместного использования одного и того же файла между двумя именами. Например, если A связан с B, то открытие A или B даст те же данные вызывающей программе.

В этом случае у вас есть 2 файла libboost_date_time-gcc41-mt-1_39.so.1.39.0 и libboost_date_time-gcc41-mt-1_39.a. Файлы .so - это общие библиотеки, а .a - статические.

Ссылки без номеров версий libboost_date_time-gcc41-mt.so и libboost_date_time-gcc41-mt.a существуют для того, чтобы сборки, не заботящиеся о номере версии, могли использовать эти библиотеки.

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

см. Boost docs для полного объяснения

...