我有两个库,例如两个烤面包机库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正确运行。但是,如果我在 my_app 上运行 ldd,我会看到它根据需要链接到libtoaster_a.so.1而不是libtoaster.so.1,因此更改libtoaster.so.1链接无效。
有没有比制作libtoaster_a.so.1、将其重命名为 libtoaster.so.1、针对该库制作 my_app 然后删除libtoaster.so.1并再次将其创建为符号链接更好的方法来解决此问题?