gcc связывает разделяемую библиотеку с символической ссылкой

У меня есть две библиотеки, например две библиотеки тостеров libtoaster_a.so и libtoaster_b.so и все связанные символические ссылки major / minor / 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 и снова создать его как символическую ссылку?

8
задан Gone Coding 20 July 2011 в 14:56
поделиться