问题背景: 我有一个库,比如说 mylib.so ,其中包含一个旧的 libpng 。 现在(由于最近的Google Play政策)我要使用更新的 libpng ;但这可能很难,因为很久以前编译了这个库,并且可能需要很长时间才能收集所有需要的库,旧版本......等等。
问题:
是否可以从 mylib.so 文件中“删除”特定条目,以便我可以链接 mylib.so 和新的 libpng .so 来自我的应用程序,一切都运行得很好(显然,如果libpng向后兼容里面的 mylib.so)?
我不知道共享库的内部,但我希望链接器能够以某种方式执行此操作而无需重新编译整个 mylib.so ... 我太乐观了吗?
额外的问题(不是主要问题,但我想理解它):如果 mylib.so 包含旧的 libpng 我链接到 mylib.so 和一个新的 libpng ......会发生什么?我的意思是,链接器允许我链接2个库,可能与导出符号的类似名称...但它有点令人困惑......
答案 0 :(得分:1)
是否可以从文件mylib.so中删除特定条目,
没有
大多数UNIX系统(AIX除外)将.so
视为最终链接产品,无法进一步修改。
如果mylib.so包含一个旧的libpng,我链接到mylib.so和一个新的libpng ...会发生什么?
您的程序违反了一个定义规则,表现出未定义的行为。通常它会崩溃,但其他任何事情都是可能的。例如,它可能会无声地破坏您的堆栈并导致每小时或每天一次崩溃。这样的错误是最难发现的。只是不这样做。