因此,我们从一家供应商那里获得了共享库,他们不会在 Linux 或 Android 上以静态存档 .a 格式交付他们的库(但在其他平台上可以),因为他们不方便更改他们的构建过程。问题是需要包装线程创建、malloc 和大量其他 api,以解决平台非标准 libc 中的错误。我们使用 LD 使用“--wrap”命令将函数重定向到我们的包装。不幸的是,对于已编译的 .so,我们无法重新链接它。是否有将 .so 转换为静态存档并重新链接它或什至重写链接表以将这些调用重定向到我们的包装的方法?
除了拆卸、更改库和重新组装之外,我想不出有什么方法可以轻松地做到这一点。
最佳答案
Is there anyway of turning the .so into a static archive
没有。
LD_PRELOAD
似乎是实现您想要的目标的最简单方法。
because on android, you are fork of the Zygote process for your startup, you can't use LD_PRELOAD. You can LD_PRELOAD on subprocesses but you can't do it on your main process.
所以在你的“启动”过程中,修改环境并execve
真正的程序。问题解决了吗?
关于android - 在 elf 中重写链接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17304634/