删除共享库中包含的库

时间:2017-01-09 10:41:09

标签: linker shared-libraries symbols

问题背景: 我有一个库,比如说 mylib.so ,其中包含一个旧的 libpng 。 现在(由于最近的Google Play政策)我要使用更新的 libpng ;但这可能很难,因为很久以前编译了这个库,并且可能需要很长时间才能收集所有需要的库,旧版本......等等。

问题:

是否可以从 mylib.so 文件中“删除”特定条目,以便我可以链接 mylib.so 和新的 libpng .so 来自我的应用程序,一切都运行得很好(显然,如果libpng向后兼容里面的 mylib.so)?

我不知道共享库的内部,但我希望链接器能够以某种方式执行此操作而无需重新编译整个 mylib.so ... 我太乐观了吗?

额外的问题(不是主要问题,但我想理解它):如果 mylib.so 包含旧的 libpng 我链接到 mylib.so 和一个新的 libpng ......会发生什么?我的意思是,链接器允许我链接2个库,可能与导出符号的类似名称...但它有点令人困惑......

1 个答案:

答案 0 :(得分:1)

  

是否可以从文件mylib.so中删除特定条目,

没有

大多数UNIX系统(AIX除外)将.so视为最终链接产品,无法进一步修改。

  

如果mylib.so包含一个旧的libpng,我链接到mylib.so和一个新的libpng ...会发生什么?

您的程序违反了一个定义规则,表现出未定义的行为。通常它会崩溃,但其他任何事情都是可能的。例如,它可能会无声地破坏您的堆栈并导致每小时或每天一次崩溃。这样的错误是最难发现的。只是这样做。