У меня есть две библиотеки, например, две библиотеки тостеров libtoaster_a.so и libtoaster_b.so и все связанные основные / второстепенные / rev символические ссылки, например libtoaster_a.so.1.0.0 и т. Д. Обе библиотеки реализуют один и тот же интерфейс тостера, но просто выполняют обработку по-разному.Следовательно, когда я создаю приложение, которое использует библиотеку, не имеет значения, какой из них используется (с точки зрения приложений, они одинаковы).
Поскольку я хотел бы решить, какую библиотеку использовать после того, как приложение былоСкомпилированный и распространенный Я создаю символическую ссылку libtoaster.so , которая указывает на libtoaster.so.1 , которая может затем указывать либо на libtoaster_a.so.1 и libtoaster_b.so.1 .Следовательно, пользователь / установщик может просто изменить ссылку libtoaster.so.1 , чтобы выбрать используемую реализацию.
Для сборки, скажем, у меня есть libtoaster.so.1 по умолчанию libtoaster_a.so.1 .когда я компилирую свое приложение, например: my_app чем-то вроде gcc -o my_app -ltoaster...
, оно компилируется и даже работает с libtoaster_a.so.1 правильно.Однако, если я запустлю ldd на my_app, я увижу, что он связан с libtoaster_a.so.1 , а не с libtoaster.so.1 по желанию, следовательно, изменив libtoaster.so.1 ссылка не имеет никакого эффекта.
Есть ли лучший способ исправить это, чем сделать libtoaster_a.so.1 , переименовать его в libtoaster.so.1 , сделать my_app против этой библиотеки и затем удалить libtoaster.so.1 и снова создать его как символическую ссылку?