如何仅使用较新的.o文件更新.so文件?

时间:2013-11-08 20:51:28

标签: android linux linker shared-libraries native

我正在开发一个Android项目,其中包含嵌入在apk中的原生“.so”文件。每当我们需要发布错误修复时,我们现在发布一个带有“.so”的新apk文件。但这是一个巨大的文件,效率不高。

所以我的问题是,是否可以更新“.apk”中的“.so”,只更改相关的“.o”文件?意味着保持“.so”文件的其余部分相同,我们只能更新那些已更改的“.o”文件吗?类似于某些系统如何推动其错误修复。

1 个答案:

答案 0 :(得分:1)

无法更新动态库(.so)的部分内容。它不像静态库(.a),它本质上只是一个带有目标文件的普通存档。动态库更像是通常的可执行文件,可以被认为只是一个没有main的程序。实际上,共享库通常编译为PIC,总体而言,如果库的一部分发生更改,则应更新所有其他部分。

说,在某个函数a的代码中还有一条指令,后跟函数bc。然后,bc的地址应该按照添加到a的指令的大小来增加。然后,应使用新地址更新此动态库中bc的所有调用网站。

尽管如此,它可以在理论上完成,但实施成本远远高于它的利润。