【发布时间】:2011-06-14 05:19:08
【问题描述】:
我有两个库,例如两个 toaster 库 libtoaster_a.so 和 libtoaster_b.so 以及所有相关的主要/次要/rev 符号链接,例如 libtoaster_a。 so.1.0.0 等。两个库都实现了相同的烤面包机接口,只是处理方式不同。因此,当我构建一个使用该库的应用程序时,使用哪个并不重要(从应用程序的角度来看,它们是相同的)。
因为我想在编译和分发应用程序后决定使用哪个库,所以我创建了一个指向 libtoaster.so.1 的符号链接 libtoaster.so > 然后可以指向 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 并再次将其创建为符号链接?
【问题讨论】: