我有两个库,例如两个烤箱库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.但是,如果我在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并再次将其创建为符号链接?