背景
我继承并维护一个与特定硬件密切耦合的Linux共享库,我们称之为libfoo.so.0.0.0
。这个库已经存在一段时间并且“只是工作”。这个库现在已成为几个更高层应用程序的依赖项。
不幸的是,新的硬件设计迫使我创建具有更宽类型的符号,从而产生了libfoo.so.0.1.0
。只有添加操作;没有删除或其他API更改。更新后符号的原始、窄版本仍以其原始形式存在。
此外,我有一个应用程序(例如myapp
)依赖于libfoo
。它最初是为支持库的0.0.0
版本编写的,但现在已经重写为支持新的0.1.0
API。
出于向后兼容性原因,我希望能够通过编译标志构建myapp
,以便支持旧的或新的库。给定构建的内核将始终具有精确已知的一版本库。
问题
很可能将来会再次更新libfoo
。
在构建
myapp
时,是否可以根据构建标志指定要链接的最小版本libfoo
?我知道可以直接在构建CLI上指定库名。这会导致
myapp
需要精确地那个版本,还是后来的具有相同主要修订版号的库仍能够与之链接(例如libfoo.so.0.2.0
)?我真的希望不必每次发布新的次要版本时都更新每个依赖应用程序的构建。有没有更聪明的方法以应用程序无关的方式实现这一点?
参考资料