Я не знаю, как работают общие библиотеки на Linux. Я пытаюсь понять, как приложения разрешают различные версии одной и той же разделяемой библиотеки во время выполнения в Linux.
Насколько я понимаю, в общей библиотеке есть три "имени", например
- libmy.so.1.2 (реальное имя, то есть фактический файл obj)
- libmy.so.1 (SONAME, который встроен в фактический файл obj)
- libmy.so(имя компоновщика, предоставленное компоновщику во время соединения и встроенное в исполняемый файл)
Когда вы устанавливаете библиотеку через LDCONFIG, она создаст следующие символические ссылки
- (2) = > (1)
- (3) = > (2)
Теперь скажем, что я скомпилирую другую версию той же библиотеки со следующим именем, libmy.so.2.0. SONAME по рекомендациям будет libmy.so.2.0
Во время ссылки на приложение укажите, что такое имя компоновщика, которое я бы предоставил с флагом -l. Следуя рекомендациям, которые я прочитал (http://www.dwheeler.com/program-library/Program-Library-HOWTO/x36.htm l), не было бы это libmy.so, и если да, то как обе версии выделить файл obj?