2013-06-07 2 views
2

У меня есть вопрос, связанный с созданием библиотеки на C++ для нескольких платформ. Я замечаю, что многие библиотеки ожидают «символической ссылки». С CMake, символическая ссылка делается на следующие коды:Почему мы должны устанавливать символическую ссылку при создании библиотеки?

set_target_properties({library_name}, PROPERTIES VERSION, ${library_string_version} SOVERSION {library_string_shortversion}) 

Я не могу понять, почему символьная ссылка необходима для библиотеки. Более того, мне кажется, что символическая ссылка всегда связана с версией библиотеки и существуют ли между ними отношения? Благодаря!

ответ

2

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

Мне часто жаль, что у меня не было символических ссылок в MS Windows, так как это облегчает жизнь.

+1

Есть [NTFS Junctions] (http://en.wikipedia.org/wiki/NTFS_junction_point). [Я использую это] (http://jonathonreinhart.blogspot.com/2011/10/ssds-and-windows-users-directory.html), чтобы указать «C: \ Users» на «D: \ Users», где C: мой SSD и D: это мой RAID-массив 1 ТБ. –

+0

Спасибо! Я не знал об этом, хотя я слышал об этом немного, но никогда не исследовал его. У меня всегда складывалось впечатление, что это сложно, но из вашей ссылки это выглядит не хуже, чем в среде Unix. – Devolus

2

Он позволяет бок о бок управлять версиями библиотеки.

libfoo.so -> libfoo.2.so 
libfoo.1.so -> libfoo.1.23.so 
libfoo.1.23.so 
libfoo.2.so -> libfoo.2.1.so 
libfoo.2.1.so 

Таким образом, libfoo.so является всегда последняя версия. Если вы знаете (по соображениям совместимости), что вам нужна версия 1, а не версия 2, вы можете ссылаться на libfoo.1.so и всегда иметь последнюю версию v1.

Смежные вопросы