动态库(.so)版本的兼容性

时间:2012-11-16 16:05:55

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

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

这是挑战: - 我的进程需要某些lib说 libcap.so.1 但是centos 6有更新的版本说 libcap.so.2
我能够使用以下任何黑客攻击旧软件

  1. 创建符号链接(libcap.so.1)到libcap.so.2
  2. 将libcap.so.1复制到新机器(centos 6)
  3. 两者之间建议什么,这种方法有任何已知问题,在centos6上编译将是我的最后选择。

1 个答案:

答案 0 :(得分:0)

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

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