【问题标题】:Compatibility of dynamic lib(.so) version动态库(.so)版本的兼容性
【发布时间】:2012-11-16 16:05:55
【问题描述】:

我有一个在 centos 5 上编译和运行的软件,现在我有兴趣在 Centos 6 上运行它,未经修改,无需在新机器上编译。

这是挑战:-
我的过程需要某些库说 libcap.so.1 但centos 6 有更新版本说 libcap.so.2
我可以使旧软件与以下任何黑客一起工作

  1. 创建到 libcap.so.2 的符号链接 (libcap.so.1)
  2. 将 libcap.so.1 复制到新机器(centos 6)

在两者之间推荐什么,这种方法是否存在任何已知问题,在 centos6 上编译将是我的最后选择。

【问题讨论】:

    标签: c linux gcc linux-kernel shared-libraries


    【解决方案1】:

    创建这样的符号链接有时会起作用,具体取决于导致新版本的更改的确切内容 - 它们必须是最小的更改,尤其是不会删除对旧库具有的任何例程/变量的访问权限或彻底改变任何保留的例程/变量的签名。如果库使用符号版本控制(如 gcc 标准 C 库所做的那样),.2 版本可能仍包含以前版本提供的完整 API,但我不知道 @987654323 @ 这样做...

    如果新库没有封装旧 API,您最安全的选择是重新编译。如果您的应用程序不是关键任务,并且/或者您可以处理崩溃和数据损坏的可能性,那么尝试符号链接路由应该不会有多大伤害......

    【讨论】:

    • thx,如果旧库被复制并与新库共存,是否有任何已知问题?
    • 不应该...您可以同时安装.1.2。通常,.so(没有版本号)会指向最新的,所以新编译的东西会使用更新的版本。不过,您可能需要手动安装文件,因为该库可能已打包为一次只允许安装一个版本。
    • 这个机制是专门为允许同一个库的多个版本共存而创建的。除非有充分的理由,否则发行版不应禁止并行安装。
    • @SimonRichter 同意...但这并不意味着他们不同意,至少在实践中如此。通常,当安装新更新时,旧版本会被删除。这是因为只允许一个版本,还是只是包管理器的“标准程序”取决于发行版......
    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2014-07-07
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多